2008-08-26 227 views
9

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

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

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

回答

8

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

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

我通过Dr. Nic's post

2

取决于服务器上发现这一点,但最简单的解决方案,我知道的,使用Apache:

FakeBasicAuth

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

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

1

如果要生成证书,则需要导致客户端生成一个密钥对,并且至少向您发送公钥,您可以通过一个Javascript调用,在Firefox中执行此操作,它是crypto.generateCRMFRequest。我猜测其他浏览器中也有可用的浏览器方法。首先,你需要弄清楚如何在获得公钥后发布证书

你可以在服务器上编写脚本使用OpenSSL,但它内置了对CSR的支持,而不是Firefox将向您发送的CRMF格式。因此,您需要编写一些代码将CRMF转换为CSR,这需要某种DER处理能力。我只是在这里摸索表面—操作CA,即使是玩具应用,也不是微不足道的。

像OpenId和PKI解决方案这样的SSO解决方案确实有重叠,并且在PKI中有一种优雅。但是魔鬼正在细节中,这种方法长期存在的原因有很多,但在政府和军事应用中才有所发展。

如果您有兴趣追求此目标,请跟进一些特定于您希望开发CA服务的平台的问题。

+0

您可以直接使用keygen元素,而不必使用http://www.whatwg.org/specs/web-apps/current-work/multipage/forms.html#the-keygen-element – hendry 2009-05-26 07:55:20

0

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

我创建了必要的服务器设置和一个firefox插件来处理基于证书的身份验证。去mypassfree.com抢免费的firefox插件。给我发电子邮件(该页面上的链接)为服务器设置,因为我还没有用一个很好的安装程序打包它。

服务器设置的Apache2 + OpenSSL的+ Perl的(但是你可以重写任何语言Perl脚本)

乔纳森

0

您可以生成使用特定浏览器的代码客户端浏览器的证书。请参阅this question

您也可以在Ruby中使用OpenSSL生成SSL客户端证书服务器端(see this q)。 (这可以在没有浏览器特定代码的任何浏览器中工作,但是您的服务器将生成客户端的私钥,这对于加密纯粹主义者来说并不理想。)

无论您使用哪种方法生成它们,您都需要配置您的Web服务器以要求客户端证书。例如,请参阅the Apache docs

+0

CSR生成(或等效)适用于大多数流行的浏览器(IE,FF,Chrome,...),但代码往往是针对浏览器的。看到这个答案:http://stackoverflow.com/a/9198400/372643 – Bruno 2012-10-29 15:12:12

相关问题