我正在从 PHP 5.6 升级到 PHP 7.3,似乎 PHP 7.3 中的 SoapClient 忽略了 sslverify_peer
选项。
在 PHP 5.6 中,以下代码按原样执行:
$opts = [
'ssl' => [
'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
'verify_peer' => false,
],
];
$stream_context = stream_context_create($opts);
$options = [
'stream_context' => $stream_context,
];
$client = new SoapClient("https://...?wsdl", $options);
$client->SomeMethod();
在 PHP 7.3 中执行相同的代码会导致PHP Fatal Error: Uncaught SoapFault exception: [WSDL] SOAP-ERROR: Parsing WSDL: Couldn't load from 'https://...?wsdl' : failed to load external entity "https://...?wsdl"
我试过包括verify_peer_name => false
在内$opts
;allow_self_signed => true
(尽管证书不是自签名的——只是没有由运行代码的机器上的任何受信任的证书签名)。我还尝试包含cafile
签署远程证书的根 CA(以 .pem 格式)以及整个证书链(以 .pem 格式)。此外,我尝试包含该capath
选项,指向我保存了根 CA 以及证书链的目录。
如果我尝试通过提供uri
and绕过下载 wsdl location
,我会收到错误PHP Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in...
到目前为止,我还没有发现 5.6 和 7.3 之间的差异可以解释我所看到的行为差异。