php - 使用 SSL 证书验证 Web 浏览器

标签 php authentication browser ssl

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

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

最佳答案

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

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

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

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

目前尚不清楚您是在识别浏览器还是用户。最终,一切都通过浏览器进行,但客户端证书往往会分配给用户。用户必须将该证书安装到他们的浏览器中。


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

Is it possible to authenticate a web browser using an ssl certificate.

Say i store a private key in my application, is there any way to read a key from a browser and try to authenticate based on that?

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

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

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

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

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

关于php - 使用 SSL 证书验证 Web 浏览器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12509811/

相关文章:

php - 使用 Javascript 动态更改 PHP 值

javascript - 来自数据库数据的内容可更改 Dropdownlist

php - 使用 Doctrine 迁移数据变得很慢

perl - Perl 中用于 Web 控制面板登录的唯一 Web 浏览器标识 ID

security - 客户端身份验证对于 k8s 来说足够好吗?

javascript - javascript可以作为某些插件通过浏览器运行吗

javascript - 透明 GIF 在 IE6 中显示在内容后面

delphi - 如何在网页中按下这样的按钮?

javascript - 在 php 脚本中使用 javascript

Javascript - 登录框不起作用