php – SoapFault异常[HTTP]无法连接到主机:使用本地SSL证书

我正在尝试使用
PHP Soap客户端连接到具有本地SSL文件的SOAP Web服务.

由于本地SSL证书无法正常使用PHP,我已经下载了WSDL文件并在本地保存.

现在,当我尝试连接到webservices时,我收到此错误:

SoapFault exception: [HTTP] Could not connect to host in /var/www/index.php:38 Stack trace: #0 [internal function]: SoapClient->__doRequest('__call('GetTests', Array) #2 /var/www/index.php(38): SoapClient->GetTests() #3 {main}

我正在使用Debian Wheezy服务器.
当我在Stackoverflow上做了一些阅读时,我发现你应该启用我安装的openssl并根据phpinfo()加载;

运行脚本时我做:

soap.wsdl_cache_enabled = 0
soap.wsdl_cache_ttl = 0

在我的/ etc / hosts文件中,我添加了该服务以确保

我将防火墙设置为接受SOAP:

ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:1664
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:1664

我在PHP文件中尝试了几个设置,比如使用TLS或SSLv3等.
以上都没有帮助.

这是我的脚本:

error_reporting(E_ALL ^ E_NOTICE);
ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);

$wsdl = "/var/www/php/soap.wsdl";
$url =  "https://www.soaptest.nl/api/soap";
$pem = "/var/www/php/my_interface.p12";

$client = new SoapClient(
    $wsdl,
    array(
        "location" => "https://www.soaptest.nl/api/soap",
        //"uri" => "http://www.soaptest.nl/api",
        "local_cert" => $pem,
        "passphrase" => "mypassforthepem",
        "soap_version" => SOAP_1_1,
        "trace" => true,
        "exceptions" => 0,
        "features" => SOAP_SINGLE_ELEMENT_ARRAYS
    )
);

print $client->GetTests();

因此,到目前为止,我所做的所有设置似乎没有任何效果.
我可能会忘记某件事或做一些我不应该做的事,但我再也看不到了.

请帮帮我,让我知道更多.
提前致谢.

最佳答案 我通过使用openssl将PEM文件拆分为两个单独的密钥和crt文件来解决问题:

openssl pkcs12 -in certname.pem -nocerts -out key.pem -nodes
openssl pkcs12 -in certname.pem -nokeys -out bla.crt

使用它并在代码中设置这些值,它确实有效.

点赞