我正在使用以下php代码来检测远程服务器上是否启用了sslv3,代码工作正常,但我发现它与标准的openssl命令相比给出了混合结果
扫描示例主机:www.itunes.com
PHP代码:
$stream_sslv3 = stream_context_create (array("ssl" =>
array("verify_peer" => false,
"capture_session_meta" => true,
"verify_peer_name" => false,
"allow_self_signed" => true,
'crypto_method' => STREAM_CRYPTO_METHOD_SSLv3_CLIENT,
"sni_enabled" => true)));
@$read_stream_sslv3 = stream_socket_client("sslv3://www.itunes.com:443", $errno, $errstr, 2, STREAM_CLIENT_CONNECT, $stream_sslv3);
if ( $read_stream_sslv3 === false ) {
echo ' SSLv3 disabled';
echo "\n";
} else {
echo 'SSLv3 enabled';
echo "\n";
}
var转储显示以下内容,表明它能够连接?
var_dump($read_stream_sslv3);
类型(流)的资源(16)
但是,如果我在同一台机器上使用openssl,则在远程服务器上禁用sslv3并且连接失败:
openssl s_client -connect www.itunes.com:443 -ssl3
结果:
22888:错误:1409E0E5:SSL例程:SSL3_WRITE_BYTES:ssl握手 失败:。\ ssl \ s 3_pkt.c:598: 没有可用的对等证书
此外,其他服务器检查工具报告在www.itunes.com上禁用了sslv3,所以我想知道为什么我的php代码说它已启用?
php代码有问题吗?