DotNetOpenAuth - 在Mono上诊断“未找到OpenID终结点”

4

我正在运行DotNetOpenAuth的mono分支构建版本,并在使用Google进行身份验证时遇到No OpenID Endpoint Found错误,但不确定如何诊断。

更多信息:

  • 在Windows下运行相同的mono分支构建版本正常工作。
  • 使用本地openid提供程序进行身份验证正常工作(Windows和Linux)。
  • 使用myopenid进行身份验证正常工作(可能是因为它不像Google那样是https?)
  • 相同的Web.Config、二进制文件在Windows和Linux下都一样。
  • 已禁用DNOA openid cacheDiscovery设置。
  • 已检查通过Linux机器的防火墙的SSL是否有效。(例如:wget https://www.google.com有效)。
  • 已检查apache错误日志,未报告任何错误。

有没有提示如何诊断此问题?

跟进:仍在研究中,据我所知,这是与dotnetopenauth无关的mono/ssl问题。从C#代码发出的简单ssl请求失败,显示Invalid certificate received from server. Error code: 0xffffffff800b010a异常。

在mono 2.4 / ubuntu 9.10桌面环境下运行mozroots可以解决问题,但是在mono 2.6 / ubuntu 10.10服务器上运行相同的mozroots命令无法解决问题。我正在使用以下内容:
yes yes|sudo mozroots --import --machine

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

两天时间完成了。非常感谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您,谢谢您! - Sean
2个回答

3
你需要在机器存储中的“certs”目录旁边创建一个空的“keypairs”目录:
  sudo mkdir /usr/share/.mono/keypairs

mozroots(在其背后的certmgr)不会创建它,但是没有它,mono运行时将拒绝建立连接(并且它本身无法创建它,因为机器存储仅由root可写;我不知道它为什么需要创建它然后将其保留为空)。


1
顺带一提,Brad的解决方案只有在/www/.config/.mono/目录对www-data有写入权限时才能生效。 - tymtam

0

这是一个hack答案,但至少我让它工作了...

似乎在mono 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

现在它可以运行了...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接