
How do I support SSL Client Certificate authentication?我想做 myopenid 做的事情——一旦你登录了,你可以点击一个按钮来为你生成一个 SSL 证书;浏览器然后下载此证书并存储它。当您稍后返回 yourid.myopenid.com 时,您的浏览器可以使用其存储的证书进行身份验证,因此您不需要密码。 所以我的问题是需要什么才能使其正常工作?如何生成证书?将它们呈现给我后如何验证它们? 我的堆栈是使用 Passenger 的 Rails on Apache,但我并不太特别。 这些通常被称为客户端证书。 我实际上并没有使用过它,但是可以在此处找到一个修改后的 restful-authentication 版本,看起来就像你所追求的那样。 我通过 Nic 博士的帖子找到了这个 取决于服务器,但我知道的最简单的解决方案是使用 Apache: FakeBasicAuth
不确定 Rails,但通常的 REMOTE_USER 环境变量应该可以通过某种方式访问??。 您可以使用特定于浏览器的代码在客户端浏览器中生成证书。看到这个问题 您还可以在 Ruby 中使用 OpenSSL 在服务器端生成 SSL 客户端证书(请参阅此 q)。 (这将在任何没有浏览器特定代码的浏览器中工作,但您的服务器将生成客户端的私钥,这对于加密纯粹主义者来说并不理想。) 无论您使用哪种方法生成它们,您都需要将您的网络服务器配置为需要客户端证书。有关示例,请参阅 Apache 文档。 如果你想生成证书,你需要让客户端生成一个密钥对,并且至少给你发送一个公钥。您可以通过 Javascript 调用在 Firefox 中执行此操作,它是 crypto.generateCRMFRequest。我猜在其他浏览器中也有特定于浏览器的方法。但首先,您需要弄清楚在获得公钥后如何颁发证书。 您可以使用 OpenSSL 在服务器上编写脚本,但它内置了对 CSR 的支持,而不是 Firefox 发送给您的 CRMF 格式。因此,您需要编写一些代码来将 CRMF 转换为 CSR,这将需要某种 DER 处理能力……我只是在这里触及表面——操作 CA,即使对于玩具应用程序,也不是微不足道的。 像 OpenId 和 PKI 解决方案这样的 SSO 解决方案确实存在重叠,而且 PKI 有一种优雅之处。但魔鬼在细节中,有充分的理由说明为什么这种方法已经存在了很长时间,但只在政府和军事应用中起飞。 如果您对此感兴趣,请跟进一些特定于您希望在其上开发 CA 服务的平台的问题。 我一直在努力解决这个问题。我想做同样的事情,我知道很多其他网站所有者都想要这个功能,不管有没有第三方提供商。 我创建了必要的服务器设置和一个 firefox 插件来处理基于证书的身份验证。前往 mypassfree.com 获取免费的 Firefox 插件。给我发电子邮件(该页面上的链接)以获取服务器设置,因为我还没有用一个不错的安装程序打包它。 服务器设置是 Apache2 OpenSSL Perl(但你可以用任何语言重写 perl 脚本) 乔纳森 |