我无法在PHP中创建加密的SOAP请求。根据文档,我将每个请求加密到支付网关。我创建了一个CSR&将其发送给证书的权威机构。他们寄回给我域名证书& CA证书。最大的问题是文档不适用于PHP。根据文件:
Web服务受WS-Security Sign和加密保护 政策
经过很长一段时间的搜索,我找到了helper class from Git,但每当我尝试连接时,都会收到以下错误:
一般安全错误(未找到解密证书(KeyId))
FaultCode: 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链接)?
答案 0 :(得分: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的服务,并且像魅力一样工作。