在 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_client
与context
一起使用。此处提供了可用的 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);