是否可以在浏览器中请求生成客户端密钥对,并将公钥发送到服务器CA以进行透明签名?然后在用户的浏览器中安装签名证书?
情景:
下次客户端连接到服务器时,将根据客户端证书验证其身份。
如果服务器可以强制/提示客户端使用密码加密来保护他的私钥,那就太好了。
我已经看过使用java applet进行此任务的网上银行业务。是否可以使用本机浏览器功能来实现?欢迎使用Apache / PHP或Node.js解决方案。
答案 0 :(得分:16)
是的,这是可能的。但是,没有跨浏览器解决方案。
X509Enrollment.CX509EnrollmentWebClassFactory
或CEnroll.CEnroll
使用某些ActiveX控件,具体取决于它是在Windows XP还是Vista / 7上运行。这将生成PKCS#10证书请求(您可能需要在传统分隔符之间进行包装。<keygen />
标记。它是一个遗留的Netscape标签,之前不是正式的HTML,但它已经变成了HTML 5(尽管MS已经表示他们不会在它们的实现中支持它)。这将生成SPKAC结构(类似于CSR)。Here is an example script应该完成ActiveX或Keygen的大部分工作。
当服务器返回证书(可能稍后)时,浏览器应将其导入其商店并将其与请求时生成的私钥相关联。
私钥的保护方式取决于浏览器或基础证书存储机制。例如,在Firefox中,安全设备上应该有一个主密码。
在服务器端,您可以使用各种工具实现自己的CA. OpenSSL和BouncyCastle可以处理PKCS#10和SPKAC。这是BouncyCastle-based example(与上面的脚本相关联)和some code for CRMF。
如果您想要现成的解决方案,您可能会对OpenCA等感兴趣。