【问题标题】:php sockets unable to connect to ssl//:443php 套接字无法连接到 ssl //:443
【发布时间】:2016-11-25 17:12:38
【问题描述】:

我有一个代码可以检查网站是否有 SSL 证书,如下所示:

$url = "stackoverflow.com";
$orignal_parse = parse_url($url, PHP_URL_HOST);
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
$read = stream_socket_client("ssl://".$orignal_parse.":443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);
$cert = stream_context_get_params($read);
$certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
var_dump($certinfo);

如果我插入一个包含 HTTPS 的 url,此代码会返回给我有关证书的所有信息,但如果我插入一个不包含 HTTPS 的 url,我会收到以下错误:

警告:stream_socket_client():无法连接到 ssl://:443 (无法连接,因为目标机器主动 拒绝它。)在

我该如何解决这个问题?

【问题讨论】:

  • 该错误表明远程服务器未侦听或阻止连接到端口 443(SSL 端口)。您需要适当地处理该错误,如果遇到它,您就知道该站点不支持 SSL。
  • 好吧,在这种情况下,我需要另一个代码来检查该请求的响应,如果状态代码是 200 我执行我的代码,如果不是我不'不执行该代码并避免警告...

标签: php sockets curl


【解决方案1】:

您应该检查 stream_socket_client() 的返回值,如果它返回 false,则不再继续(因为资源无效)。

$url = "stackoverflow.com";
$orignal_parse = parse_url($url, PHP_URL_HOST);
$get = stream_context_create(array("ssl" => array("capture_peer_cert" => TRUE)));
$read = stream_socket_client("ssl://".$orignal_parse.":443", $errno, $errstr, 30, STREAM_CLIENT_CONNECT, $get);

if (!$read) {
    // ssl connection failed for some reason
    // could be a certificate error or failure to connect on port 443
    echo "Failed to connect to site.  Error {$errno}: {$errstr}\n";
} else {
    $cert = stream_context_get_params($read);
    $certinfo = openssl_x509_parse($cert['options']['ssl']['peer_certificate']);
    var_dump($certinfo);
}

【讨论】:

  • 谢谢,您的代码有效,现在我的问题解决了
猜你喜欢
  • 2013-05-24
  • 2020-11-30
  • 2020-07-28
  • 2013-09-16
  • 2015-06-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-10
相关资源
最近更新 更多