使用SSL证书验证Web浏览器

时间:2012-09-20 09:33:13

标签: php authentication browser ssl

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

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

2 个答案:

答案 0 :(得分:4)

您可以使用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 :(得分:-2)

不,你做不到。

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

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

相关问题