ruby-on-rails - view教程 - 创建rails项目




我如何支持SSL客户端证书身份验证? (4)

我想做什么myopenid做 - 一旦你已经登录,你可以点击一个按钮,生成一个SSL证书; 浏览器然后下载这个证书并且存储它。 当您稍后返回到yourid.myopenid.com时,您的浏览器可以使用其存储的证书进行身份验证,因此您永远不需要密码。

所以我的问题是什么需要得到这个工作? 我如何生成证书? 一旦他们回馈给我,我如何验证他们?

我的堆栈是使用Passenger的Apache上的Rails,但我不太特别。


取决于服务器,但我知道的最简单的解决方案,使用Apache:

FakeBasicAuth

“启用此选项后,客户端X509证书的主题专有名称(DN)将被转换为HTTP基本授权用户名,这意味着可以使用标准的Apache身份验证方法进行访问控制。 (可以通过运行OpenSSL的openssl x509命令来确定):openssl x509 -noout -subject -in certificate.crt)。请注意,没有密码从用户获得...“

不确定关于轨道,但通常的REMOTE_USER环境变量应该以某种方式访问​​。


如果要生成证书,则需要使客户端生成密钥对,并至少向您发送公钥。 你可以在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脚本)

乔纳森


这些通常被称为客户端证书。

我没有真正使用它,但在这里可以找到restful-authentication的修改版本,看起来像你之后。

我通过Nic博士的帖子找到了这个





ssl