如何通过pem文件和PHP连接外部服务器

时间:2017-07-29 13:11:18

标签: php wsdl pem jks

我有.jks文件,我想通过使用此jks文件从我的网站连接其中一个银行服务器。

首先,我使用此命令将此.jks文件转换为pkcs

keytool -importkeystore -srckeystore client.jks -destkeystore client.pkcs -srcstoretype JKS -deststoretype PKCS12

然后使用此命令openssl pkcs12 -in client.pkcs -out client.pem

将pkcs转换为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得到了参考,但没有工作

0 个答案:

没有答案