Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用SSL证书对Web浏览器进行身份验证_Php_Authentication_Browser_Ssl - Fatal编程技术网

Php 使用SSL证书对Web浏览器进行身份验证

Php 使用SSL证书对Web浏览器进行身份验证,php,authentication,browser,ssl,Php,Authentication,Browser,Ssl,是否可以使用ssl证书对web浏览器进行身份验证 假设我在应用程序中存储了一个私钥,有没有办法从浏览器中读取密钥并尝试基于此进行身份验证?没有,您不能这样做 目前正在进行一些开发,几天前W3C提出了一个加密标准的建议 但是,您可以将密钥放入cookie中,并使用它来标识。这是默认的PHP会话id行为 您可以使用SSL/TLS客户端证书身份验证对浏览器/用户进行身份验证 客户端证书必须由服务器请求,因此您需要访问服务器配置(而不仅仅是在共享服务器上安装一些PHP代码)。这是在SSL/TLS层完成的

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


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

没有,您不能这样做

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


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

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

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

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

这样安全吗?在cookie中有密钥吗?“不,你不能那样做。”:简短的断言语句,但没有任何引用/理由。有什么可以支持的吗?您可以使用证书对客户端进行身份验证。@斯蒂芬:不,cookie中的密钥不是很安全。然而,大多数商店里的“记住我”都储存在饼干里。这一切归结为智能钥匙和服务器上良好身份验证的组合。您可以在密钥中加密客户端的IP并检查。@JvdBerg您不能在会话cookie中存储SSL私钥,因为这在协商HTTPS参数后才可用。请参阅Bruno的回答如果您不熟悉SSL客户端证书身份验证,这里有几个链接:,和(例如)。诚然,从用户界面的角度来看,它并不一定很棒,但大多数浏览器和服务器都广泛支持它。(您当然可以将这种形式的身份验证传递给PHP。)“假设我在应用程序中存储私钥”,您认为私钥应该放在哪里还不清楚。您可以将私钥放在浏览器的证书存储或智能卡中。+1正如您所说。我以这种方式进行了几次启用SSL的部署。