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使用证书对请求进行签名?