【问题标题】:How to encrypt each soap request in php如何在php中加密每个soap请求
【发布时间】:2017-05-03 11:22:51
【问题描述】:

我无法在 PHP 中发出加密的 SOAP 请求。根据文档,我加密了对支付网关的每个请求。我生成了一个 CSR 并将其发送给证书颁发机构。他们给我发回了域证书和 CA 证书。最大的问题是该文档不适用于 PHP。根据文件:

Web 服务受 WS-Security 签名和加密保护 政策

搜索了很长时间后,我找到了helper class from Git,但每当我尝试连接时,都会出现以下错误:

一般安全错误(未找到用于解密的证书 (KeyId))

故障代码: wsse:InvalidSecurity

我尝试如下设置 SSL 标头:

$contextOptions = array(
    'ssl' => array(
        'verify_peer'   => false,
        'verify_peer_name'  => false,
        'cafile'        => '../../certs/CA.cer',
        'local_cert'        => '../../certs/server.cer',
        'local_pk'        => '../../certs/private_key.key',
        'verify_depth'  => 0,
        'allow_self_signed'=>true,
    )
);

$sslContext = stream_context_create($contextOptions);

更新

我将键定义为:

define('PRIVATE_KEY', 'server_prvate_key.key');
define('CERT_FILE', 'domain_cert.cer');
define('SERVICE_CERT', 'CA.cer');

这个定义有什么问题吗(请参阅上面的 GIT 链接)?

【问题讨论】:

  • cer/key 文件/路径是否存在?你看过那个stackoverflow.com/questions/7147988/…
  • @GabrielHeming 是的。文件存在
  • 您需要定义密钥和证书的完整路径,帮助类不会猜测它们在哪个文件夹中
  • @Capsule 路径正确,密钥和证书内容也可用
  • 你具体在哪里实现你引用的类?

标签: php encryption soap wss


【解决方案1】:

你尝试过使用 curl 吗?

使用以下选项设置您的证书:

    curl_setopt($ch,CURLOPT_CAINFO, 'CA.cer' );
    curl_setopt($ch,CURLOPT_SSLCERT, 'domain_cert.cer' );
    curl_setopt($ch,CURLOPT_SSLKEY, 'server_prvate_key.key' );
    curl_setopt($ch,CURLOPT_SSLCERTPASSWD, 'certificate_password' ); //if have

我使用加密连接到支付网关和使用 curl 的其他服务,工作起来就像一个魅力。

【讨论】:

  • 我试过 curl 但在 curl 执行后我得到了错误,在检查异常后我发现错误:“wsse:InvalidSecurityMissing wsse:Security header in request”,我不知道如何添加安全头!搜索了一段时间,我发现了一些带有用户名和密码的示例
猜你喜欢
  • 2017-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多