使用此代码:
$soap = new SoapClient('https://test-api.geotrust.com/webtrust/query.jws?WSDL');
我看到了这个错误:
PHP致命错误:SOAP-ERROR:解析WSDL:无法从' https://test-api.geotrust.com/webtrust/query.jws?WSDL'加载:未能加载外部实体" https://test-api.geotrust.com/webtrust/query.jws?WSDL"
如果你有PHP 5.5,你可以这样做:
$soap = new SoapClient($url),
array (
"ssl_method" => "SOAP_SSL_METHOD_SSLv23"
)
PHP 5.4.4的任何此类解决方案?我目前无法升级PHP。
我已经尝试过在网上找到的sslv3://
建议,但它并不适用于Debian。
感谢。
答案 0 :(得分:0)
SoapClient :: SoapClient():SSL操作失败,代码为1. OpenSSL错误消息:错误:140770FC:SSL例程:SSL23_GET_SERVER_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 :
openssl s_client -ssl3 -connect example.com:443
TLS 1.0 :
openssl s_client -tls1 -connect example.com:443 -servername example.com
TLS 1.1 :
openssl s_client -tls1_1 -connect example.com:443 -servername example.com
TLS 1.2 :
openssl s_client -tls1_2 -connect example.com:443 -servername example.com
array ( "ssl_method" => "SOAP_SSL_METHOD_SSLv23" )
只是自行车脱落,但在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(弱/受伤)和压缩(损坏,泄漏信息)。这意味着我们使用TLS 1.0及更高版本进行连接。如果TLS 1.2可用,则使用;否则如果TLS 1.1可用,则使用它;否则使用TLS 1.0。