【问题标题】:how to send SOAP request with SSL certificate in PHP?如何在 PHP 中使用 SSL 证书发送 SOAP 请求?
【发布时间】:2012-07-25 11:00:07
【问题描述】:

我正在尝试发送带有 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\供应商\WebServices\MyWS.php,第 206 行]

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

但是又出现了一个新的错误。

结果:字符串(773)“读取前缀错误:Action.Execute”

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

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

【问题讨论】:

标签: php web-services soap ssl ssl-certificate


【解决方案1】:

我在我的肥皂电话中使用 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
    )
);

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

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

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

希望这会对你有所帮助。

【讨论】:

  • "uri" => "urn:xmethods-delayed-quotes" 这真的有必要吗??我还无法连接。
猜你喜欢
  • 2016-11-07
  • 2019-04-13
  • 1970-01-01
  • 2011-09-25
  • 1970-01-01
  • 2011-11-01
  • 1970-01-01
  • 2018-05-14
  • 2011-11-13
相关资源
最近更新 更多