繁体   English   中英

如何在PHP中使用SSL证书发送SOAP请求?

[英]how to send SOAP request with SSL certificate in PHP?

我正在尝试发送带有DER证书的SOAP-PHP请求(这意味着证书没有privateKey)但没有成功。

$local_cert = FULL_PATH_TO_MY_CERT;

   $client = new SoapClient($wsdl, array(
                'local_cert' => $local_cert,
                'trace' => 1,
                'exceptions' => 1,
                'soap_version' => SOAP_1_1,
                'encoding' => 'ISO-8859-1',
                'compression' => (SOAP_COMPRESSION_ACCEPT | SOAP_COMPRESSION_GZIP),
                'location' => 'https://webserviceurl:port/ws/servlet/ws'
            ));

只有我收到这个错误:

警告(2):SoapClient :: SoapClient()[soapclient.soapclient]:无法设置私钥文件`PATHTOMYLOCALCERT'[APP \\ Vendor \\ WebServices \\ MyWS.php,第206行]

警告(2):SoapClient :: SoapClient()[soapclient.soapclient]:无法创建SSL句柄[APP \\ Vendor \\ WebServices \\ MyWS.php,第206行]

警告(2):SoapClient :: SoapClient()[soapclient.soapclient]:无法启用加密[APP \\ Vendor \\ WebServices \\ MyWS.php,第206行]

警告(2):SoapClient :: SoapClient(https:// webserviceurl:port / ws / servlet / ws?wsdl)[soapclient.soapclient]:无法打开流:操作失败[APP \\ Vendor \\ WebServices \\ MyWS.php,第206行]

警告(2):SoapClient :: SoapClient()[soapclient.soapclient]:I / O警告:无法加载外部实体“https:// webserviceurl:port / ws / servlet / ws?wsdl”[APP \\ Vendor \\ WebServices \\ MyWS.php,第206行]

但是我发现了一个使用函数file_get_contents($ local_cert)的小技巧(在php.net中); 错误消失了。

但是一个新的错误来自于。

结果:string(773)“读取前缀时出错:Action.Execute”

我的意思是......上面的这个错误......来自WebService? 因为它无法通过我的请求进行身份验证?

谢谢大家。 (感谢你的回答)

我在肥皂电话中使用SSL证书。

在我的情况下,我在服务器上为wsdllocal_cert提供绝对路径我已经在我的类中定义了那些。 请注意,我使用的是.pem格式的证书。

public $local_cert = "/var/www/.../webroot/cert.pem";
public $wsdl = "/var/www/.../webroot/my_wsdl.wsdl";

$this->client = new SoapClient($this->wsdl, array(
        "trace"         => 1, 
        "exceptions"    => true, 
        "local_cert"    => $this->local_cert, 
        "uri"           => "urn:xmethods-delayed-quotes",
        "style"         => SOAP_RPC,
        "use"           => SOAP_ENCODED,
        "soap_version"  => SOAP_1_2 ,
        "location"      => $this->location
    )
);

在我的证书中有两部分。 证书和RSA私钥。

(1)-----BEGIN CERTIFICATE-----
MIIFjzCC....
....
-----END CERTIFICATE-----
(2)-----BEGIN RSA PRIVATE KEY-----
MIIEpAI....
....
ww==
-----END RSA PRIVATE KEY----

最重要的是,您应该使用https链接拨打肥皂。 这对我来说很好。

希望这会帮助你。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM