为PHP5.4.4SOAPClient启用SSLv3支持

为PHP5.4.4SOAPClient启用SSLv3支持,php,soap-client,Php,Soap Client,使用此代码: $soap=新的SoapClient'shttps://test-api.geotrust.com/webtrust/query.jws?WSDL'; 我看到了这个错误: PHP致命错误:SOAP-error:解析WSDL:无法从加载外部实体失败 如果您有PHP5.5,可以执行以下操作: $soap = new SoapClient($url), array ( "ssl_method" => "SOAP_SSL_METHOD_SSLv23" ) PHP5.4.4有这样的解

使用此代码:

$soap=新的SoapClient'shttps://test-api.geotrust.com/webtrust/query.jws?WSDL';

我看到了这个错误:

PHP致命错误:SOAP-error:解析WSDL:无法从加载外部实体失败

如果您有PHP5.5,可以执行以下操作:

$soap = new SoapClient($url),
array (
"ssl_method" => "SOAP_SSL_METHOD_SSLv23"
)
PHP5.4.4有这样的解决方案吗?我现在无法升级PHP

我已经尝试了我在网上找到的sslv3://建议,但它在Debian上不起作用

谢谢

SoapClient::SoapClient:SSL操作失败,代码为1。OpenSSL错误消息:错误:140770FC:SSL例程:SSL23\u GET\u服务器\u HELLO:未知协议

听起来好像没有SSL/TLS服务器在侦听。您可以使用以下方法复制它。注意使用端口80而不是443

$ openssl s_client -connect stackoverflow.com:80
CONNECTED(00000003)
140735323054556:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:787:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 7 bytes and written 320 bytes
---
New, (NONE), Cipher is (NONE)
Secure Renegotiation IS NOT supported
Compression: NONE
Expansion: NONE
---
如果确实有SSL/TLS服务器在侦听,则可以尝试使用单个协议连接到该服务器:

SSL v3:

TLS 1.0:

TLS 1.1:

TLS 1.2:

只是自行车脱落,但在C中,我们通常使用2/3方法,然后禁用无用的协议和选项。例如:

const SSL_METHOD* method = SSLv23_method();
if(method == NULL) handleFailure();

SSL_CTX* ctx = SSL_CTX_new(method);
if(ctx == NULL) handleFailure();

/* Cannot fail ??? */
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(ctx, flags);

在上面的代码中,我们使用2/3方法,然后禁用SSLv2断开、SSLv3弱/受伤和压缩断开、泄漏信息。这意味着我们使用TLS1.0及以上版本进行连接。如果TLS 1.2可用,则使用它;否则,如果TLS 1.1可用,则使用它;否则将使用TLS 1.0。

什么是TLSv3?那是SSLv3还是TLS1.3?谢谢你的详细帖子,但我希望标题能说明我在PHP5.4.4中寻找TLSv3支持。PHP5.5支持SSLv3,但旧版本不支持。很抱歉造成混淆。我是说SSLV3,不是TLS。对不起@taco。我不确定PHP5.x支持什么。我是根据问题的OpenSSL标签回答的。但您确定有SSL/TLS服务器在侦听吗?我看到的另一个导致奇怪错误的原因是混合/匹配OpenSSL版本,如0.9.8和1.0.1。它们不是二进制兼容的。
openssl s_client -tls1 -connect example.com:443 -servername example.com
openssl s_client -tls1_1 -connect example.com:443 -servername example.com
openssl s_client -tls1_2 -connect example.com:443 -servername example.com
array (
  "ssl_method" => "SOAP_SSL_METHOD_SSLv23"
)
const SSL_METHOD* method = SSLv23_method();
if(method == NULL) handleFailure();

SSL_CTX* ctx = SSL_CTX_new(method);
if(ctx == NULL) handleFailure();

/* Cannot fail ??? */
const long flags = SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION;
SSL_CTX_set_options(ctx, flags);