我希望能够做到类似myopenid所做的事情-一旦您登录,就可以单击按钮生成SSL证书;然后浏览器会下载此证书并存储它。当您以后再次访问yourid.myopenid.com时,您的浏览器可以使用其存储的证书进行身份验证,因此您永远不需要密码。
所以我的问题是,要使其工作,需要什么条件?如何生成证书?一旦它们被呈现给我,如何验证它们?
我的堆栈是在Passenger上使用Apache的Rails,但我不是特别挑剔。
我希望能够做到类似myopenid所做的事情-一旦您登录,就可以单击按钮生成SSL证书;然后浏览器会下载此证书并存储它。当您以后再次访问yourid.myopenid.com时,您的浏览器可以使用其存储的证书进行身份验证,因此您永远不需要密码。
所以我的问题是,要使其工作,需要什么条件?如何生成证书?一旦它们被呈现给我,如何验证它们?
我的堆栈是在Passenger上使用Apache的Rails,但我不是特别挑剔。
如果您想生成证书,您需要让客户端生成一个密钥对,并将至少公钥发送给您。您可以通过 Firefox 中的 Javascript 调用 crypto.generateCRMFRequest 来完成此操作。我猜测其他浏览器也有特定于浏览器的方法可用。但首先,您需要弄清楚如何在获取公钥后发放证书。
您可以使用 OpenSSL 在服务器上编写脚本,但它内置支持 CSR,而不是 Firefox 将发送给您的 CRMF 格式。因此,您需要编写一些代码将 CRMF 转换为 CSR,这将需要某种 DER 处理能力……我只是浅显地介绍了一下——即使是玩具应用程序的 CA 操作也不简单。
像 OpenId 和 PKI 解决方案这样的 SSO 解决方案与 PKI 有重叠之处。但魔鬼在细节中,这种方法存在已经很长时间,但只在政府和军事应用中才得以推广的充分理由。
如果您有兴趣追求此事,请跟进一些特定于您要开发 CA 服务的平台的问题。
我一直在解决这个问题。我想做同样的事情,我知道很多其他网站所有者也想要这个功能,无论是否有第三方提供商。
我创建了必要的服务器设置和一个Firefox插件来处理基于证书的身份验证。请访问mypassfree.com获取免费的Firefox插件。发送电子邮件给我(该页面上的链接)以获取服务器设置,因为我尚未将其与漂亮的安装程序打包在一起。
服务器设置是Apache2 + OpenSSL + Perl(但您可以使用任何语言重写Perl脚本)
乔纳森