gpt4 book ai didi

ssl - 在浏览器中生成客户端证书并在服务器上签名

转载 作者:太空宇宙 更新时间:2023-11-03 12:39:03 26 4
gpt4 key购买 nike

是否可以在浏览器中请求生成客户端 key 对并将公钥发送到服务器 CA 进行透明签名?然后在用户的浏览器中安装签名证书?

场景:

  1. 用户打开 https://examle.com/网页,验证服务器身份
  2. 用户请求创建帐户
  3. key 对在用户的浏览器中生成,不会透露给服务器/CA
  4. 公钥被发送到服务器进行签名
  5. 服务器签署 key 并生成证书
  6. 证书被发送到客户端并与私钥一起安装在浏览器中

下次客户端连接到服务器时,将根据客户端证书验证其身份。

如果服务器可以强制/提示客户端使用密码加密来保护他的私钥,那就太好了。

我已经看到在线银行使用 java applet 来完成这项任务。是否可以使用 native 浏览器功能来做到这一点?欢迎使用 Apache/PHP 或 Node.js 解决方案。

最佳答案

是的,这是可能的。但是,没有跨浏览器的解决方案。

  • 对于 Internet Explorer,您必须使用 X509Enrollment.CX509EnrollmentWebClassFactory 来使用一些 ActiveX 控件或 CEnroll.CEnroll ,取决于它是在 Windows XP 还是 Vista/7 上运行。这将生成一个 PKCS#10 证书请求(您可能需要将其包裹在传统的分隔符之间。
  • 对于其余部分,您应该能够使用 <keygen />标签。这是一个遗留的 Netscape 标签,以前不是正式的 HTML,但它已经进入 HTML 5(尽管 MS 表示他们不会在他们的实现中支持它)。这将生成一个 SPKAC 结构(类似于 CSR)。
  • 对于 Firefox(尽管它支持注册机),您可以使用 CRMF functions .

Here is an example script这应该为 ActiveX 或 Keygen 完成大部分工作。

当服务器返回证书时(可能稍后),浏览器应将其导入其存储并将其与它在请求时生成的私钥相关联。

如何保护私钥取决于浏览器或底层证书存储机制。例如,在 Firefox 中,安全设备上应该有一个主密码。

在服务器端,您可以使用各种工具实现您自己的 CA。 OpenSSL 和 BouncyCaSTLe 可以处理 PKCS#10 和 SPKAC。这是一个 BouncyCastle-based example (与上面的脚本相关),以及 some code for CRMF .

如果您想要现成的解决方案,您可能会对类似 OpenCA 的内容感兴趣.

关于ssl - 在浏览器中生成客户端证书并在服务器上签名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9197484/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com