【问题标题】:Authenticate Web Browser with SSL certificate使用 SSL 证书对 Web 浏览器进行身份验证
【发布时间】:2012-09-12 15:40:44
【问题描述】:

是否可以使用 ssl 证书对 Web 浏览器进行身份验证。

假设我在我的应用程序中存储了一个私钥,有没有办法从浏览器中读取一个密钥并尝试基于它进行身份验证?

【问题讨论】:

  • 假设我在我的应用程序中存储了一个私钥”,不清楚你认为私钥应该放在哪里。
  • 您可以在浏览器的证书存储或智能卡中拥有私钥。

标签: php authentication browser ssl


【解决方案1】:

不,你不能那样做。

正在进行一些开发,几天前 W3C 提出了加密标准的提案。

但是,您可以将密钥放入 cookie 并使用它来识别。这是默认的 PHP 会话 ID 行为。

【讨论】:

  • 这样安全吗?在 cookie 中有密钥?
  • 不,你不能那样做。”:简短的断言声明,但没有任何参考/理由。有任何参考来支持这一点吗?您可以使用证书对客户端进行身份验证。
  • @Stephen:不,cookie 中的密钥不是很安全。但是,商店中的大多数“记住我”都存储在 cookie 中。这一切都归结为智能密钥和服务器上良好身份验证的组合。您可以在密钥中加密客户端的 IP 并检查。
  • @JvdBerg 您不能将 SSL 私钥存储在会话 cookie 中,因为这在协商 HTTPS 参数后可用。请参阅 Bruno 的回答
  • 如果您不熟悉 SSL 客户端证书身份验证,这里有几个链接:123(例如)。诚然,从 UI 的角度来看,它不一定很好,但它得到了大多数浏览器和服务器的广泛支持。 (您当然可以将这种形式的身份验证传递给 PHP。)
【解决方案2】:

您可以使用 SSL/TLS 客户端证书身份验证对浏览器/用户进行身份验证。

客户端证书必须由服务器请求,因此您需要访问服务器配置(不仅仅是在共享服务器上安装一些 PHP 代码)。这是在 SSL/TLS 层完成的(实际上,该机制并不特定于 HTTPS):服务器在 SSL/TLS 握手期间请求客户端证书(有时通过重新协商的握手)。在 Apache Httpd 中,这通常通过 SSLVerifyClient 完成(尽管您还需要指定其他选项)。

然后,服务器将根据您为其配置的 CA 验证证书(可能是您自己的,并且可能独立于用于服务器证书本身的 CA)。 (或者,在某些情况下,您可以在服务器级别禁用证书验证,并让 PHP 应用程序执行此操作,但这有点高级,您需要知道自己在做什么。)

您可以从您的应用程序访问客户端证书并获取其主题 DN(或替代名称),以识别客户端。

不清楚您是在识别浏览器还是用户。最后,无论如何,一切都通过浏览器,但客户端证书往往分配给用户。用户必须将该证书安装到他们的浏览器中。


编辑:有关更多详细信息,如果您能澄清您的问题以及您打算对此做什么,将会有所帮助。

是否可以使用 ssl 证书对 Web 浏览器进行身份验证。

假设我在我的应用程序中存储了一个私钥,有什么方法可以读取 来自浏览器的密钥并尝试基于该密钥进行身份验证?

首先,严格来说,没有“SSL 证书”之类的东西,因为 SSL/TLS 可以使用多种类型的证书,其中一些相同的证书还可以用于 SSL/TLS 以外的其他用途。通常,“SSL 证书”是指“SSL/TLS 上下文中的 X.509 证书”。

因此,使用 SSL 证书对 Web 浏览器进行身份验证意味着在 SSL/TLS 层进行。 (已经尝试在 HTTP 层使用 X.509 证书实现消息级安全性,但它们并未得到浏览器的广泛支持。)

其次,私钥由您进行身份验证的远程方持有。验证远程方的本地方看不到任何私钥。如果您(作为服务器)想要验证 Web 浏览器,则需要拥有私钥的是浏览器,而不是您的(可能是 PHP)应用程序。在这种情况下,如果您要验证的浏览器是您的(PHP?)应用程序,为什么它会拥有/需要私钥,这不是很清楚。

您的验证应用程序可能需要(如果不是由服务器本身完成)是一个 CA 证书,以便能够验证它所提供的客户端证书(或至少某种形式的信任锚来验证客户端)证书)。这里不需要私钥,只需要公钥和证书,除非您希望您的应用程序也成为 CA。

确实,您可以让您的应用程序成为一个迷你 CA。它可以使浏览器生成密钥对并向服务器发送证书请求(有一些机制可以让网页让浏览器完成所有这些工作)。然后服务器将生成证书并让浏览器将其导入回其私钥。随后,浏览器可以使用该证书与该服务器(或可以识别这些证书的其他服务器)进行身份验证。

【讨论】:

  • +1 就像你说的那样。我用这种方式做了几个启用 SSL 的部署。
猜你喜欢
  • 2012-06-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-14
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-08-04
相关资源
最近更新 更多