我们正在尝试实施以下工作流程:
- 使用 window.crypto 在浏览器中生成私钥
- 在浏览器中创建 PKCS10 证书签名请求
- 将 PKCS10 发送到服务器
- 服务器签署请求并返回 PEM 格式的 x509 证书
- 浏览器为自己存储证书
在浏览器中使用 keygen 标签并使用 SPKAC 而不是 pkcs10 已经可以实现同样的效果。现在,但是浏览器不存储返回的证书,只是想保存它们。当我们尝试手动将证书导入浏览器时,我们得到“证书的私钥丢失或无效”。我们怀疑 window.crypto.generateKey() 生成的私钥没有存储在浏览器的密钥库中。如何获取存储在密钥库中的私钥?
前两步的实现基于http://blog.engelke.com/2014/08/23/public-key-cryptography-in-the-browser/
更新:由于某些浏览器使用操作系统密钥库,我也在研究通过其他方式将密钥保存到操作系统密钥库中的可能性。到目前为止我发现了什么:
Java 不能根据这个问题使用:Tell Java to use Windows keystore
在 Windows 中可以使用 ActiveX 控件。
摘要: 发现没有标准的跨浏览器和跨操作系统的方式来生成和有意义地使用 X509 证书。有一些组合(非 Windows 操作系统上的新 chrome 版本(放弃 keygen 支持))无法做到这一点。