如何在php中加密每个soap请求

问题描述 投票:0回答:1

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

Web 服务受到 WS-Security Sign 和加密的保护 政策

搜索了很长时间后,我从 Git 找到了一个 helper 类,但每当我尝试连接时,我都会收到以下错误:

一般安全错误(未找到用于解密的证书(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 链接)?

php encryption soap ws-security
1个回答
6
投票

你尝试过使用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 与支付网关和其他服务进行加密连接,效果非常好。

© www.soinside.com 2019 - 2024. All rights reserved.