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

时间:2020-03-05 18:43:25  来源:igfitidea点击:

我想做myopenid的操作-登录后,我们可以单击一个可生成SSL证书的按钮;然后,浏览器将下载此证书并将其存储。当我们稍后返回yourid.myopenid.com时,浏览器可以使用其存储的证书进行身份验证,因此我们不需要密码。

所以我的问题是要使它正常工作需要什么?如何生成证书?将它们提交给我后,如何验证它们?

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

解决方案

回答

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

我实际上并没有使用过它,但是可以在这里找到经过修改的restful-authentication版本,看起来像后世。

我是通过Nic博士的帖子找到的

回答

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

FakeBasicAuth

"When this option is enabled, the Subject Distinguished Name (DN) of the Client X509 Certificate is translated into a HTTP Basic Authorization username. This means that the standard Apache authentication methods can be used for access control. The user name is just the Subject of the Client's X509 Certificate (can be determined by running OpenSSL's openssl x509 command: openssl x509 -noout -subject -in certificate.crt). Note that no password is obtained from the user... "

不确定rails,但是应该可以某种方式访问​​通常的REMOTE_USER环境变量。

回答

如果要生成证书,则需要使客户端生成密钥对,并至少向我们发送公钥。我们可以在Firefox中通过Javascript调用crypto.generateCRMFRequest进行此操作。我猜想其他浏览器中也有特定于浏览器的方法。但是首先,我们需要弄清楚一旦获得公钥后如何颁发证书。

我们可以使用OpenSSL在服务器上编写一些脚本,但是它具有对CSR的内置支持,而不是Firefox会向我们发送的CRMF格式。因此,我们需要编写一些代码以将CRMF转换为CSR,这将需要某种DER处理能力。

诸如OpenId和PKI解决方案之类的SSO解决方案确实存在重叠,并且PKI具有优雅之处。但是细节决定成败,并且有充分的理由说明这种方法已经存在了很长的时间,但是仅在政府和军事应用中才得以普及。

如果我们有兴趣进行此操作,请针对我们要在其上开发CA服务的平台提出一些具体问题。

回答

我一直在努力解决这个问题。我想做同样的事情,并且我知道很多其他网站的拥有者都希望使用此功能,无论有没有第三方提供商。

我创建了必要的服务器设置和一个firefox插件来处理基于证书的身份验证。前往mypassfree.com获取免费的firefox插件。通过电子邮件发送给我(该页面上的链接)以获取服务器设置信息,因为我尚未将其与一个不错的安装程序打包在一起。

服务器设置为Apache2 + OpenSSL + Perl(但是我们可以用任何语言重写perl脚本)

乔纳森