2

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

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

4

2 回答 2

5

您可以使用 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。它可以使浏览器生成密钥对并向服务器发送证书请求(有一些机制可以让网页让浏览器完成所有这些工作)。然后服务器将生成证书并让浏览器将其导入回其私钥。随后,浏览器可以使用该证书与该服务器(或可以识别这些证书的其他服务器)进行身份验证。

于 2012-09-20T10:18:39.627 回答
-2

不,你不能那样做。

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

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

于 2012-09-20T09:35:45.883 回答