我正在尝试使用
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
使用它并在代码中设置这些值,它确实有效.