如何在PHP中使用“openssl_x509_parse”作为过期/错误证书?

时间:2017-01-08 03:23:50

标签: php ssl

我是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']);
?>

我可以告知如何解决这个问题吗?

谢谢!

1 个答案:

答案 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)));