我试图向某个网址发送肥皂请求。我的SOAP选项是:
array(
'location' => 'https://some_url/',
'features' => SOAP_SINGLE_ELEMENT_ARRAYS,
'trace' => 1,
'soap_version' => SOAP_1_2,
'connection_timeout' => 60,
'stream_context' => stream_context_create([
'ssl' => [
'verify_peer' => true,
'verify_peer_name' => true,
'allow_self_signed' => true,
'cafile' => 'cacert.crt', // This file really exists, checked that
]
])
);
我收到以下错误:
SoapClient::__doRequest(): SSL operation failed with code 1. OpenSSL Error messages:
error:0407006A:rsa routines:RSA_padding_check_PKCS1_type_1:block type is not 01
error:04067072:rsa routines:RSA_EAY_PUBLIC_DECRYPT:padding check failed
error:0D0C5006:asn1 encoding routines:ASN1_item_verify:EVP lib
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed
所以我用google搜索"块类型不是01",但结果非常稀少。有人可能认为ca证书是错误的,但当我在代表我的网址的页面上时,我使用Chromium的开发人员工具(安全选项卡)获取了它。只是为了确保它没问题我把它放在我的浏览器中并且该页面打开时没有任何安全警告,向我显示XML响应。 将它放在/ usr / share / ca-certificates /中也没有效果。
证书具有pem编码。
verify_peer设置为false当然不是一个选项。
我的php版本是5.5.17-2,但在PHP 7.0.21-1上观察到相同的行为。操作系统是Ubuntu 16.04。 OpenSSL 1.0.1 2012年3月14日,与OpenSSL 1.0.2g-fips 2016年3月1日相同的效果。
有什么想法吗?