我是PHP的新手,但正在研究并尝试构建显示SSL证书状态的简单网页。 (例如,有效期) 此外,每个服务器(公用名)和端口都存储在MySQL DB中,并由PDO读取。 通常这在服务器返回有效证书时有效。 但是,如果证书过期或其他原因(例如不匹配的公用名称),则无法加载。
代码如下:
<?php
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
$read = stream_socket_client("ssl://".$row["domain"].":".$row["port"], $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
$cert = stream_context_get_params($read);
$certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
?>
我可以告知如何解决这个问题吗?
谢谢!
答案 0 :(得分:1)
愚弄自己,从Stack Overflow找到解决方案。 SSL error SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
修改第一行:
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
成:
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE, 'verify_peer' => false, 'verify_peer_name' => false)));