当前位置: 首页 > 面试题库 >

如何在PHP中使用CURL获取SSL证书信息?

山阳辉
2023-03-14
问题内容

我希望能够使用CURL读取SSL证书信息。从Linux控制台,我得到以下响应头:

GET https://www.google.com/ -ed
Cache-Control: private, max-age=0
Connection: close
Date: Sun, 20 Jun 2010 21:34:12 GMT
Server: gws
Content-Type: text/html; charset=ISO-8859-1
Expires: -1
Client-Date: Sun, 20 Jun 2010 21:34:18 GMT
Client-Peer: 66.102.13.106:443
Client-Response-Num: 1
Client-SSL-Cert-Issuer: /C=ZA/O=Thawte Consulting (Pty) Ltd./CN=Thawte SGC CA
Client-SSL-Cert-Subject: /C=US/ST=California/L=Mountain View/O=Google Inc/CN=www.google.com
Client-SSL-Cipher: RC4-SHA
Client-SSL-Warning: Peer certificate not verified
Set-Cookie: PREF=ID=4d56960f6e3ad831:TM=1277069652:LM=1277069652:S=GF-w8Yc-_61NBzzJ; expires=Tue, 19-Jun-2012 21:34:12 GMT; path=/; domain=.google.com
Title: Google
X-XSS-Protection: 1; mode=block

但是使用CURL时,标头要短得多:

HTTP/1.1 200 OK
Date: Sun, 20 Jun 2010 21:39:07 GMT
Expires: -1
Cache-Control: private, max-age=0
Content-Type: text/html; charset=UTF-8
Set-Cookie: PREF=ID=2d4fb1c933eebd09:TM=1277069947:LM=1277069947:S=6_TgGKzD0rM4IWms; expires=Tue, 19-Jun-2012 21:39:07 GMT; path=/; domain=.google.com
Server: gws
X-XSS-Protection: 1; mode=block
Transfer-Encoding: chunked

是否有可能获取这些信息,带有CURL或带有其他一些PHP函数的完整标头?


问题答案:

否。 编辑 :一个CURLINFO_CERTINFO选项已添加到PHP
5.3.2。见http://bugs.php.net/49253

显然,该信息是由您的代理在响应标头中提供的。如果你想依靠这一点,你可以用卷曲的CURLOPT_HEADER选项,以true包括在输出中的标头。

但是,要在不依赖某些代理的情况下检索证书,您必须

<?php
$g = stream_context_create (array("ssl" => array("capture_peer_cert" => true)));
$r = fopen("https://www.google.com/", "rb", false, $g);
$cont = stream_context_get_params($r);
var_dump($cont["options"]["ssl"]["peer_certificate"]);

您可以$cont["options"]["ssl"]["peer_certificate"]使用OpenSSL扩展名操纵的值。

编辑 :此选项更好,因为它实际上并不发出HTTP请求,并且不需要allow_url_fopen

<?php
$g = stream_context_create (array("ssl" => array("capture_peer_cert" => true)));
$r = stream_socket_client("ssl://www.google.com:443", $errno, $errstr, 30,
    STREAM_CLIENT_CONNECT, $g);
$cont = stream_context_get_params($r);
var_dump($cont["options"]["ssl"]["peer_certificate"]);


 类似资料:
  • 我运行PHP版本5.5.12作为WAMP的一部分。 当我尝试执行此代码时,我得到以下错误: SSL证书错误:无法获得本地发行者证书此脚本旨在通过登录和密码从认证表单获取内容。 我试图在php.ini文件中添加这段代码,并重新启动了WAMP服务器,但仍然得到相同的错误。 我真的不知道还能尝试什么。 有人能告诉我还有什么可以尝试的吗?

  • 局域网IP地址怎么生成受信任的SSL证书?比如启明星辰的设备ip地址证书就是受信任的。

  • 问题内容: 我想通过TLS接收TCP连接。我想验证客户端证书,并使用它来验证我的应用程序的客户端。Go具有标准包装。它可以验证客户端/服务器证书。但是我找不到方法来获取远程(客户端)证书的详细信息,例如通用名称。 问题答案: 必须调用crypto / tls / Conn.Handshake 。然后,您可以阅读对等证书:tlsconn.ConnectionState()。PeerCertifica

  • 问题内容: 我在本地开发环境上使用WAMP,并尝试从信用卡中扣款,但收到错误消息: cURL错误60:SSL证书问题:无法获取本地颁发者证书 我在Google上进行了很多搜索,很多人建议我下载此文件:cacert.pem,将其放在某个位置,然后在php.ini中引用它。这是我的php.ini中的部分: 但是,即使多次重新启动服务器并更改了路径后,我仍然收到相同的错误消息。 我使用来自Apache模

  • 我在Google上搜索了很多,很多人建议我下载这个文件:cacert.pem,把它放在某个地方,并在我的php.ini中引用它。这是我的php.ini中的部分: 然而,即使在重新启动服务器几次并更改路径后,我也会得到相同的错误消息。 我使用Apache模块中的WAMP并启用ssl_module。在PGP扩展中,我启用了php_curl。 这是我正在运行的代码: