从浏览器中生成客户端SSL / TLS证书

CACert和MyOpenID都是这样做的:它们有一个表单,当提交时,浏览器将生成一个密钥,并将公共部分发送给签名,然后将包含该浏览器绑定的公钥的签名证书在其密钥库中,并在未来用于身份validation。 我知道如何使用SSLVerify和类似的validation客户端证书,一旦用户拥有它,我知道如何生成CA和客户端证书通常使用openssl命令行工具,而不是如何做浏览器交互位来生成钥匙等

我可能使用Apache和Ruby /机架或PHP,如果有帮助:)

您正在寻找keygen标签 。 参见Mozilla的页面 。

让EJBCA做到这一点可能会更好,因为它通过使用它的external-ra组件 (我做:)来处理不同的浏览器怪癖。

本质上,构buildejbca的两个实例。 一个充当你的安全networking后面的ca。 另一个作为前端ra的实例,将用于注册您的用户。 ca通过查询ra的MySQL数据库(externalra.propertiesconfiguration文件)来查询ra,select任何未完成的CSR,对它们签名,然后发回证书。

为了您注册用户:

  • 你必须在ca端预先创build用户(当它们被调用的时候是End实体,也就是说你必须创build一个ca,caprofile等)
  • 使用最终实体凭证login到externalra接口并提交表单。
  • 客户端的浏览器将开始显示一个忙图标。
  • CSR击中ra db,并等待ca拿起csr并退回一个证书。 一旦证书命中ra db,它会呈现给用户。

这是我使用的一个简单的ejbca生成脚本 。 它不能正常工作,但它应该工作。 更新:也看到这个问题和这个链接在Apache的客户端证书的使用