Php 如何在使用tls时使fsockopen忽略证书
在PHP7.0中,当使用fsockopen进行连接以打开https连接时(托管在同一数据库中) 主机),使用主机名,如Php 如何在使用tls时使fsockopen忽略证书,php,ssl,Php,Ssl,在PHP7.0中,当使用fsockopen进行连接以打开https连接时(托管在同一数据库中) 主机),使用主机名,如tls://foo.localhost,我收到一个错误 看起来像 fsockopen(): Peer certificate CN="bar" did not match expected CN="foo.localhost" 连接未打开 同样的代码在PHP5.5中工作(即不太严格地检查证书)。我愿意 并不真正关心验证证书(此代码在单元测试和 集成套件,仅连接到本地主机)。测试
tls://foo.localhost
,我收到一个错误
看起来像
fsockopen(): Peer certificate CN="bar" did not match expected CN="foo.localhost"
连接未打开
同样的代码在PHP5.5中工作(即不太严格地检查证书)。我愿意
并不真正关心验证证书(此代码在单元测试和
集成套件,仅连接到本地主机)。测试需要针对
不过,http和https
我知道在使用file\u get\u contents
时如何禁用这些检查
使用fsockopen时,如何禁用对等证书验证?
fsockopen
不提供忽略对等证书错误的方法
你必须使用。可用的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);
verify_peer
会影响这一点吗?@lvaroGonzález,我不知道如何将上下文传递给fsockopen
从未使用过套接字,我认为应该可以。如果没有,请尝试手册页面中建议的功能:“该功能类似,但提供了更丰富的选项集,包括非阻塞连接和提供流上下文的能力。”@lvaroGonzález,context_set_default不适用于fsockopen
。最有可能的方法是stream\u socket\u client
(我不情愿,因为fsockopen
是我需要使用的不太现代的测试库的核心)。感谢您指出。如果出现一些奇怪的开发主机名,则可能需要正确的选项“verify_peer_name”=>false。如何使用stream_socket_客户端而不是fsockopen指定端口?@ShadiNamrouti您可以在$hostname中包含端口,例如$hostname=”tls://foo.localhost:8123";代码>