PHP 7.3 SoapClient stream_context(verify_peer)被忽略

时间:2019-07-17 20:44:00

标签: php ssl soap soap-client php-7.3

我正在从PHP 5.6升级到PHP 7.3,PHP 7.3中的SoapClient似乎忽略了ssl tf.keras.callback.Callback选项。

在PHP 5.6中,以下代码应按预期执行:

verify_peer

在PHP 7.3中执行相同的代码将导致$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 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(尽管证书不是自签名的-只是没有运行代码的计算机上的任何受信任证书签名)。我还尝试过为签署远程证书的根CA包括allow_self_signed => true(以.pem格式)以及整个证书链(以.pem格式)。另外,我尝试包括cafile选项,指向我保存根CA以及证书链的目录。

如果我尝试通过提供capathuri绕过wsdl下载,则会收到错误location

到目前为止,在5.6和7.3之间的差异中我还没有发现任何东西可以解释我所看到的行为差异。

1 个答案:

答案 0 :(得分:0)

花费了太多时间后,PHP 7似乎确实尊重stream_context verify_peer选项。问题的根源是,在协商连接时使用的“默认”密码在PHP 5.6和PHP 7.3之间更改。明确调用要使用的密码,使SoapClient可以在PHP 7.3.7中进行通信。

$opts = [
    'ssl' => [
        'crypto_method' => STREAM_CRYPTO_METHOD_TLS_CLIENT,
        'verify_peer' => false,
        'ciphers' => 'RC4-SHA',
    ],
];
$stream_context = stream_context_create($opts);
$options = [
    'stream_context' => $stream_context,
];
$client = new SoapClient("https://...?wsdl", $options);
$client->SomeMethod();