DotNetOpenAuth – 在Mono上诊断“找不到OpenID Endpoint”

我正在运行DotNetOpenAuth的单声道分支构build,并尝试使用谷歌进行身份validation,但没有确定如何诊断它们有No OpenID Endpoint Found错误的问题。

更多信息:

  • 在Windows下运行相同的单声道分支生成。
  • 使用本地openid提供程序进行身份validation可以正常工作(Windows和Linux)。
  • 使用myopenid进行身份validation(可能导致它不是像https一样的https?)
  • 相同的Web.Config,二进制文件在Windows和Linux下。
  • 禁用了DNOA openid cacheDiscovery设置。
  • 已经通过Linux机器的防火墙检查过SSL。 (即: wget https://www.google.com工作)。
  • 已经检查了Apache的错误日志,没有错误报告。

任何提示如何诊断?

跟进:仍然看着这个,最好的我可以告诉这是一个mono / ssl问题不涉及dotnetopenauth。 来自C#代码的一个简单的SSL请求失败,从服务器收到无效的证书。 错误代码:0xffffffff800b010aexception。

在单声道2.4 / Ubuntu 9.10桌面下运行mozroots修复了这个问题,但是单声道2.6 / Ubuntu 10.10服务器上的mozroots命令没有帮助。 我正在使用这个:

 yes yes|sudo mozroots --import --machine 

它说它导入了证书,但一个简单的命令行程序来请求https://www.google.com仍然失败。

您需要在机器商店的“certs”目录旁边创建一个空的“keypairs”目录:

  sudo mkdir /usr/share/.mono/keypairs 

mozroots(和引擎盖下的certmgr)不创建它,但没有它单声道运行时将拒绝进行连接(它不能创建它本身,因为机器商店是只有root可写入;为什么需要创建它,然后让它为空, 我不知道)。

这是一个黑客的答案,但至少我得到了它的工作…

似乎机器证书存储在单声道2.6 / Ubuntu 10.10服务器不起作用。 不知道为什么。

修复方法是将mozroots根证书导入到www-data用户证书存储中。 由于我无法弄清楚如何使用mozroots工具来做到这一点,我手动这样做:

 sudo mkdir /var/www/.config/.mono/certs/Trust sudo mkdir /var/www/.config/.mono/certs/CA sudo cp /usr/share/.mono/certs/Trust /var/www/.config/.mono/certs/Trust 

现在它工作…