Php 无法使用证书连接BeSimpleSAP客户端

Php 无法使用证书连接BeSimpleSAP客户端,php,soap,ssl,certificate,Php,Soap,Ssl,Certificate,我正试图用我的PHP SOAP客户端发送测试消息。我正在使用BeSimpleSoap库,因为我在使用标准PHP SOAP calss和NuSOAP类时遇到了问题。 我已成功下载了受PKI保护的文件。守则的一部分是: $OIB_URL="https://xxxx:8444/kpoib/kp_lista_aktiviranih_korisnika.txt"; $Cert_path="C:\\PKI\\servercert.pem"; $key_path="C:\\PKI\\cert_file.pem

我正试图用我的PHP SOAP客户端发送测试消息。我正在使用BeSimpleSoap库,因为我在使用标准PHP SOAP calss和NuSOAP类时遇到了问题。 我已成功下载了受PKI保护的文件。守则的一部分是:

$OIB_URL="https://xxxx:8444/kpoib/kp_lista_aktiviranih_korisnika.txt";
$Cert_path="C:\\PKI\\servercert.pem";
$key_path="C:\\PKI\\cert_file.pem";
$FINA_APIS_cert="C:\\PKI\\FINA_APIS.pem";
$cert_password="xxx";

$handle = curl_init();
$options = array( 
    CURLOPT_RETURNTRANSFER => TRUE,
    CURLOPT_SSL_VERIFYPEER => TRUE,
    CURLOPT_CAINFO         => $FINA_APIS_cert,
    CURLOPT_VERBOSE        => TRUE,
    CURLOPT_SSL_VERIFYHOST => FALSE,
    CURLOPT_SSLCERTPASSWD  => $cert_password ,
    CURLOPT_SSLCERT        => $Cert_path,
    CURLOPT_SSLKEY         => $key_path,
    CURLOPT_SSLVERSION     => 3,
    CURLOPT_URL            => $OIB_URL
);

curl_setopt_array($handle, $options);


$OIB_File=(string)curl_exec($handle);
if (curl_errno($handle)) {
  echo 'Error: ' . curl_error($handle);
}
curl_close($handle);
档案包括:

  • soap_cert.pem是CA以pem格式签署的证书
  • cert_file.pem是加密的私钥,我的IIS证书采用pem格式
  • FINA_api.pem是我与之通信的服务器的证书和CA根自签名证书
我不知道如何将这些证书和密钥传递给SoapClient以发送测试消息。 我试过这个:

    $par_data=array("KorisnickiPretinacPoruka" => 
        array("Zaglavlje"=>
            array("IdPosiljatelja"=>"000000001","IdPoruke"=>$UUID,"DatumVrijemeSlanja"=>$date_time,"RazinaSigurnosti"=>2),
                "Poruka" =>array("PinPrimatelja"=>$OIB,"OznakaDrzave"=>"HR","Predmet"=>$title,"Sadrzaj"=>$rows_lines)));

    $par_envelope=array( "GsbEnvelope" =>  
        array( "MessageHeader" => 
            array("SenderId" => "000000001",
                "ServiceId" => "000000002",
                "MessageId" => $UUID,
                "SenderTimeStamp" => $date_time),
                "Content" => array("MimeType" =>"application/xml","Data" =>array("encoding"=>"EMBEDDED","any"=>$par_data))));


    $client = new BeSimple\SoapClient\SoapClient("GSBService.wsdl", array( 
                    "trace"=>1,
                    "exceptions"=>1,
                    "local_cert" =>$key_path,
                    "passphrase"=>$cert_password,
                    "connection_timeout" => 30));


    print_r( $client->sendMessage($par_envelope));



    echo "<p>Request :".htmlspecialchars($client->__getLastRequest()) ."</p>";
    echo "<p>Response:".htmlspecialchars($client->__getLastResponse())."</p>";
    echo "<p>Debug:".soapDebug($client)."</p>";
$par_data=array(“Korisnickipretinacoruka”=>
数组(“Zaglavlje”=>
数组(“IdPosiljatelja”=>“00000000 1”、“IdPoruke”=>$UUID”、“DatumVrijemeSlanja”=>$date\u time”、“RazinaSigurnosti”=>2),
“Poruka”=>数组(“PinPrimatelja”=>$OIB,“OznakaDrzave”=>“HR”,“Predmet”=>$title,“Sadrzaj”=>$rows\u line));
$par_信封=数组(“gsbendevelope”=>
数组(“MessageHeader”=>
数组(“SenderId”=>“00000000 1”,
“ServiceId”=>“00000000 2”,
“MessageId”=>$UUID,
“SenderTimeStamp”=>$date\u time),
“Content”=>array(“MimeType”=>“application/xml”,“Data”=>array(“encoding”=>“EMBEDDED”,“any”=>$paru Data)));
$client=new BeSimple\SoapClient\SoapClient(“GSBService.wsdl”),数组(
“跟踪”=>1,
“例外情况”=>1,
“本地证书”=>$key\u路径,
“密码短语”=>$cert\u密码,
“连接超时”=>30);
打印($client->sendMessage($par_信封));
echo“请求:“.htmlspecialchars($client->\uu getLastRequest())”

”; echo“响应:“.htmlspecialchars($client->\uu getLastResponse())”

”; echo“调试:”.soapDebug($client)。“

”;
结果是:

Fatal error: Uncaught SoapFault exception: [HTTP] Could not connect to host in C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php:146 Stack trace: #0 C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php(203): BeSimple\SoapClient\SoapClient->__doHttpRequest(Object(BeSimple\SoapClient\SoapRequest)) #1 C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php(183): BeSimple\SoapClient\SoapClient->__doRequest2(Object(BeSimple\SoapClient\SoapRequest)) #2 [internal function]: BeSimple\SoapClient\SoapClient->__doRequest('<?xml version="...', 'http://www.apis...', 'http://www.apis...', 1, 0) #3 C:\xampp\htdocs\NIAS\HZZO-OKP-SOAP.php(131): SoapClient->__call('sendMessage', Array) #4 C:\xampp\htdocs\NIAS\HZZO-OKP-SOAP.php(131): BeSimple\SoapClient\SoapClient->sendMessage(Array) #5 {main} thrown in C:\xampp\htdocs\NIAS\BeSimpleSoap-master\src\BeSimple\SoapClient\SoapClient.php on line 146
致命错误:未捕获的SoapFault异常:[HTTP]无法连接到C:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php中的主机:146堆栈跟踪:#0 C:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php(203):BeSimple\SoapClient\SoapClient->(BeSimple\SoapClient\SoapRequest))#1c:\xampp\htdocs\NIAS\BeSimpleSoap master\src\BeSimple\SoapClient\SoapClient.php(183):BeSimple\SoapClient\SoapClient->u-doRequest 2(对象(BeSimple\SoapClient\SoapRequest))#2[内部函数]:BeSimple\SoapClient\SoapClient\SoapClient->u-doRequest(错误为“无法连接到主机”并且没有一些证书错误,所以您必须检查您是否连接到服务

试试这个:

$client = new BeSimple\SoapClient\SoapClient("GSBService.wsdl", array( 
                "trace"=>1,
                "exceptions"=>1,
                "local_cert" =>$key_path,
                "passphrase"=>$cert_password,
                "connection_timeout" => 30));

// set direct location to service
$client->__setLocation(xxx);

print_r( $client->sendMessage($par_envelope));

HTH.

端口已被阻止。但我现在收到此错误: