8

我在我的个人服务器上设置了自己的开放 ID 提供程序,并在我的 apache 配置文件中添加了到 https 的重定向。当不使用安全连接时(当我禁用重定向时)我可以正常登录,但使用重定向我无法登录并显示以下错误消息:

基础连接已关闭:无法为 SSL/TLS 安全通道建立信任关系。

我猜这是因为我使用的是自签名证书。

谁能确认自签名证书是否是问题所在?如果没有,有人知道问题是什么吗?

4

4 回答 4

8

为您的 OpenID URL 使用 SSL 的主要好处是它为依赖方提供了一种机制来发现 DNS 是否已被篡改。依赖方无法判断带有自签名证书的 OpenID URL 是否已被盗用。

在提供商的端点 URL 上使用 SSL 还有其他好处(更容易建立关联,不会窃听扩展数据),如果您使用自签名证书,这些好处仍然存在,但我认为这些是次要的。

于 2008-09-25T02:16:01.497 回答
5

OpenID 以重定向透明的方式设计。只要通过 GET 或 POST 在每次重定向时保留必要的键/值对,一切都会正常运行。

与不使用自签名证书的消费者实现兼容性的最简单解决方案是使用非加密端点,该端点将消息重定向checkid_immediatecheckid_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 执行身份验证操作还允许您使用secureHTTP cookie 标志。checkid_immediate如果您希望允许,这会为操作增加另一层保护。

于 2008-10-27T05:20:10.257 回答
3

(免责声明:我是 OpenID 的新手,所以我在这里可能是错的。) Open ID Consumer(例如 StackOverflow)和 Open ID Provider(您的服务器)之间的通信不需要 HTTPS——它可以像很好,就像在普通 HTTP 上一样安全。您需要做的是将您的服务器配置为仅在显示您的登录页面时才切换到 HTTPS。在这种情况下,只有您的浏览器需要关注自签名证书。您可以将证书导入您的 PC,一切都将与威瑞信颁发的证书一样安全。

于 2008-09-25T15:30:41.463 回答
2

听起来像。您的 OpenID 服务器的客户端不信任根证书颁发机构。

于 2008-09-25T02:07:20.503 回答