【问题标题】:Is it possible to generate a SSL certificate in the browser?是否可以在浏览器中生成 SSL 证书?
【发布时间】:2012-05-22 10:51:45
【问题描述】:

对于管理界面,我们希望使用 SSL 实现客户端身份验证。这个想法是,在注册过程中,每个用户都会生成一个 SSL 证书,该证书在浏览器中注册并用于向服务器验证客户端。重要的是私钥永远不会离开客户端。因此,在服务器上生成证书并将其发送给客户端不是解决方案。

是否可以使用 JavaScript 在浏览器(例如 IE 9+、Firefox 12+、Chrome)中生成 SSL 证书?可以注册证书吗?

【问题讨论】:

  • 我很确定您可以生成 SSL 证书,但我怀疑您是否能够注册它。
  • 我以前在金融网站上见过它。但更多的是安装 ActiveX 或运行应用程序,它会生成请求、证书并将其安装在个人证书存储中。它还能够阻止它在计算机或配置文件之间导出。怎么样,我不确定。
  • 您是否尝试在注册期间即时生成它?我不认为你可以,除非用户安装了 OpenSSL 之类的东西。
  • 在可行性方面,肯定有网站通过浏览器生成客户端证书,但我见过的一种实现是在 VBScript 中(天哪),显然只能在 IE 中工作。

标签: javascript ssl


【解决方案1】:

您不能真正在浏览器中生成证书,但可以在浏览器中生成证书请求(或等效):生成密钥对在浏览器中,私钥永远不会离开它。

(请注意,如果您直接在浏览器中生成证书,它充其量是自签名的,因为 CA 不会给您它的私钥。这就是为什么您只能获得证书请求,因为生成自签名证书的需求很少。我认为有一个 Firefox 扩展可以做到这一点。)

证书请求被发送到服务器,但格式取决于浏览器和使用的方法。您将在服务器端获得的是公钥,由您实施的服务将其转换为证书(当然,除非您使用现有服务)。你可以在this answer找到更多细节。

在服务器上生成证书后,可以将其重新导入以与私钥关联。

【讨论】:

  • @brianary 你能为此提供证据吗? StartSSL.com 很可能提供了免费证书,但这并不意味着证书本身是在浏览器中生成的。你怎么知道它没有向服务器请求从浏览器中返回你的证书?
  • 这是我在 2014 年在 Firefox 中报告的错误 bugzilla.mozilla.org/show_bug.cgi?id=1089474
  • 看来我误读了您回复的细节。对此感到抱歉。
  • @brianary 所以是的,早在 2012 年,Web 加密 API 还没有现在这样发达,您无法在浏览器中生成证书。您只能生成 CSR,将其发送到服务器,然后从该服务器取回证书,该服务器通过使用其私钥对其进行签名来生成证书。新的加密 API 确实可以在浏览器中生成证书,因为使用发送到浏览器的私钥签署证书几乎没有意义(从安全的角度来看)。
猜你喜欢
  • 2018-05-04
  • 2015-09-10
  • 2016-08-24
  • 2012-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-18
相关资源
最近更新 更多