我使用的是Zend Framework 1.*,执行时"stream_socket_enable_crypto"总是返回false。Zend抛出异常this exception:
"Unable to connect to HTTPS server through proxy could not negotiate secure connection."
我在前面的方法"stream_socket_enable_crypto"中尝试了以下所有加密类型,结果相同。。。
STREAM_CRYPTO_METHOD_SSLv2_CLIENT
STREAM_CRYPTO_METHOD_SSLv3_CLIENT
STREAM_CRYPTO_METHOD_SSLv23_CLIENT
STREAM_CRYPTO_METHOD_TLS_CLIENT
STREAM_CRYPTO_METHOD_SSLv2_SERVER
STREAM_CRYPTO_METHOD_SSLv3_SERVER
STREAM_CRYPTO_METHOD_SSLv23_SERVER
STREAM_CRYPTO_METHOD_TLS_SERVER
深入研究我所看到的"connectHandshake"Zend方法,我可以连接到代理,但不能通过代理连接到服务器。我被这个问题困扰了很长时间,有线索吗?
PHP版本5.6.*
最后意识到的是PHP版本的问题在PHP 5.6.*中,"verify_peer_name"默认值更改为TRUE。请参阅此处的更改日志。
将此属性设置为false解决了连接问题。
$adapter->setStreamContext(array(
'socket' => array(
// Bind local socket side to a specific interface
'bindto' => self::PROXY_HOST . ':' . self::PROXY_PORT
),
'ssl' => array(
'crypto_method' => STREAM_CRYPTO_METHOD_TLSv1_2_CLIENT,
// Verify server side certificate,
'verify_peer' => false,
'verify_peer_name' => false,
'allow_self_signed' => false,
)
)
);
希望它能帮助其他人