我有.jks文件,我想通过使用此jks文件从我的网站连接其中一个银行服务器。
首先,我使用此命令将此.jks文件转换为pkcs
keytool -importkeystore -srckeystore client.jks -destkeystore client.pkcs -srcstoretype JKS -deststoretype PKCS12
然后使用此命令openssl pkcs12 -in client.pkcs -out client.pem
然后我使用这个PHP代码进行连接
<?php
try{
$url = "https://b2brbtest.riyadbank.com/soap?service=RB_OLP_INITIATE_PAYMENT";
$certFile = dirname(__FILE__)."/client.pem";
$certPass = "xxxxx";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_SSLVERSION,3);
curl_setopt($ch, CURLOPT_PORT, 443);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSLCERT, $certFile);
curl_setopt($ch, CURLOPT_SSLCERTPASSWD, $certPass);
$headers = array();
array_push($headers, "Content-Type: text/xml; charset=utf-8");
array_push($headers, "SOAPAction: sii:RB_OLP_INITIATE_PAYMENT");
array_push($headers, "Host:b2brbtest.riyadbank.com");
if($xml != null) {
curl_setopt($ch, CURLOPT_POSTFIELDS, $xml);
array_push($headers, "Content-Length: " . strlen($xml));
}
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$response = curl_exec($ch);
$code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
print curl_error($ch);
curl_close($ch);
print_r($response);
} catch (Exception $e){
echo $e->getMessage();
}
?>
它返回此错误 的输出
与b2brbtest.riyadbank.com:443
相关的未知SSL协议错误
我正在使用wireshark来跟踪网络。
我正在尝试从我的localhost获取相同的PHP代码,它到达目标IP并显示此错误 的输出
&#39;无法连接到b2brbtest.riyadbank.com端口443:已超时&#39;。
但是当我从我的网站上尝试这个相同的代码时,我遇到了这个错误 的输出
&#39;与b2brbtest.riyadbank.com:443&#39;有关的SSL协议错误。
我不知道我的错误是什么。有人请帮我解决这个问题。
我从这里PHP : Curl https xml result returns blank得到了参考,但没有工作