使用local_cert使用SoapClient来使用WebService

时间:2013-04-16 09:15:21

标签: php soap soap-client ws-security

Hello all :)我有一个启用了传入请求签名的Axis2 WebService(在Signature设置中使用InflowSecurity的Rampart模块)。我正在尝试使用本地证书在PHP中调用它:

$client = new SoapClient(
    "http://localhost:8081/axis2/services/SomeWebService?wsdl", 
    array(
        "local_cert" => "C:\ws\MyProject\php\cert.pem",
        "trace" => 1));

var_dump($client->__soapCall(
    "someFunction", 
    array("someParameter" => "blabla"))); // line X

cert.pem的内容:

-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----

这是我得到的错误:

Fatal error: Uncaught SoapFault exception: [soapenv:Server] 
org.apache.ws.security.components.crypto.Merlin cannot create instance in 
C:\ws\MyProject\php\index.php:X

事情是org.apache.ws.security.components.crypto.Merlin是服务器端的异常(我也在服务器日志中获取);但是当我删除"local_cert" => "C:\ws\MyProject\php\cert.pem"或将其更改为"local_cert" => "C:\ws\MyProject\php\thereisnofilehere.pem"时,我会得到完全相同的错误。

这告诉我PHP根本不使用证书。或者,我在这里错过了一些东西吗?如何确保PHP使用证书对请求进行签名?

0 个答案:

没有答案