如何使 fsockopen 在使用 tls 时忽略证书

  • 本文关键字:证书 tls 何使 fsockopen php ssl
  • 更新时间 :
  • 英文 :


在 PHP7.0 中,当使用 fsockopen 连接打开 https 连接时(托管在同一host),使用像 tls://foo.localhost 这样的主机名,我收到一个错误看来

fsockopen(): Peer certificate CN="bar" did not match expected CN="foo.localhost"

连接未打开。

相同的代码在 PHP 5.5 中工作(即不太严格的检查验证)。 我愿意并不真正关心验证证书(此代码在单元测试中运行,并且集成套件,仅连接到本地主机)。 测试需要针对不过,http 和 https。

我知道如何在使用file_get_contents时禁用这些检查。

使用 fsockopen 时如何禁用对等证书验证?

fsockopen不提供

忽略对等证书错误的方法。

您必须将stream_socket_clientcontext一起使用。此处提供了可用的 SSL/TLS 上下文选项。

在没有对等验证的情况下打开套接字的示例

$context = stream_context_create([
    'ssl' => [
        'verify_peer' => false,
        'verify_peer_name' => false
    ]
]);
$hostname = "tls://foo.localhost:8123";
$socket = stream_socket_client($hostname, $errno, $errstr, ini_get("default_socket_timeout"), STREAM_CLIENT_CONNECT, $context);

最新更新