我在个人服务器上设置了自己的开放ID提供程序,并在我的apache配置文件中添加了重定向到https.当不使用安全连接时(当我禁用重定向时)我可以正常登录,但是使用重定向我无法使用此错误消息登录:
底层连接已关闭:无法为SSL/TLS安全通道建立信任关系.
我猜这是因为我使用的是自签名证书.
任何人都可以确认自签名证书是否是问题?如果不是,任何人都有任何想法是什么问题?
为您的OpenID URL使用SSL的主要好处是它为依赖方提供了一种机制来发现DNS是否已被篡改.依赖方无法判断带有自签名证书的OpenID URL是否已被泄露.
在提供商的端点URL上使用SSL可以获得其他好处(更容易建立关联,不会窃听扩展数据),如果您使用自签名证书,仍然可以保留,但我认为这些是次要的.
OpenID以重定向透明的方式设计.只要通过GET或POST在每次重定向中保留必要的键/值对,一切都将正常运行.
实现与不使用自签名证书的消费者兼容的最简单的解决方案是使用非加密端点,该端点将重定向checkid_immediate
和checkid_setup
消息重定向到加密端点.
在服务器代码中执行此操作比使用Web服务器重定向更容易,因为前者可以更轻松地处理POST请求,同时还可以将代码保持在一起.此外,只要进行了适当的检查,您就可以使用相同的端点来处理所有OpenID操作,无论是否应该通过SSL提供服务.
例如,在PHP中,重定向可以像下面这样简单:
// Redirect OpenID authentication requests to https:// of same URL // Assuming valid OpenID operation over GET if (!isset($_SERVER['HTTPS']) && ($_GET['openid_mode'] == 'checkid_immediate' || $_GET['openid_mode'] == 'checkid_setup')) http_redirect("https://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
由于该openid.return_to
值是针对普通HTTP端点生成的,因此就消费者而言,它仅处理未加密的服务器.假设使用会话和随机数进行适当的OpenID 2.0操作,消费者和服务器之间传递的任何信息都不应泄露可利用的信息.您可以利用浏览器和OpenID服务器之间的操作(密码侦听或会话cookie劫持)是通过加密通道完成的.
除了防止窃听者,通过SSL执行身份验证操作允许您使用secure
HTTP cookie标志.checkid_immediate
如果您希望允许,这会为操作增加另一层保护.