SoapFault over https:无法连接到主机

时间:2015-07-19 11:55:23

标签: openssl pem ota

我想在PHP soap中使用SITA Web Services(SWS)。 (CentOS 6 + PHP 5.6.9) SWS独立于平台,基于OpenTravel Alliance(OTA)XML标准。

首先我必须生成一个SSL DER文件并发送给他们,因为:

  

应使用HTTPS端口443上的SSL建立与SITA Web服务的所有连接和通信。客户端应用程序将使用SOAP over HTTPS访问Web服务。

     

WS-Security描述了SOAP消息传递的增强功能,通过消息完整性,消息机密性和单一消息身份验证提供高质量的保护。这些机制可用于适应各种安全模型和加密技术。

     

访问SITA Web要访问SITA Web服务,客户端需要创建密钥对PKI证书,向我们提供公共DER密钥并使用私有PEM密钥对消息进行签名。证书可以来自证书颁发机构(CA)或自签名证书,但需要遵守X.509第3版标准。

我使用这些命令生成了DER文件,如他们所说:

openssl genrsa -out key.pem
openssl req -new -x509 -key key.pem -out cert.der -days 365 -outform DER
openssl req -new -key key.pem -out cert.csr -outform DER

现在,当我想登录SITA Web服务时,我收到此错误:

[xdebug_message] => (!)SoapFault:无法连接到主机。

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);
$pem = 'wsdl/cert.pem';
$defaultEndpoint = "https://sws.qa.sita.aero/sws/SignIn";
$uri = "https://sws.qa.sita.aerosws/sws";
$wsdl = 'wsdl/SITAReservationService.wsdl';
$xml = '<?xml version="1.0" encoding="utf-8" ?>
        <SITA_SignIn Version="0" Version="1" xmlns=http://www.opentravel.org/OTA/2003/05 xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xsi:schemaLocation="wsdl/SITA_PingRQ.xsd" TransactionIdentifier="">
        <POS>
            <Source AirlineVendorID="xx" ERSP_UserID="xx/xx" AgentSine="xx/xx" PseudoCityCode="xxxx" AgentDutyCode="xx" ISOCountry="xx" AirportCode="IKA" />
        </POS>
    </SITA_SignIn>';
try{
    $client = new SoapClient($wsdl, array(
            'location' => $defaultEndpoint,
            'uri' => $uri,
            'trace'             => 1,
            'exceptions'        => true,
            'connection_timeout'=> 30,
            'ssl' => array(
                    'verify_peer' => false,
                    'allow_self_signed' => true,
                    'cafile'        => $pem,
                    'CN_match'      => 'https://sws.qa.sita.aero',
                    'ciphers'             => 'ALL'
            )
    ));
    var_dump($client->SignIn($xml));
 }   
 catch (SoapFault $fault) {
    var_dump($fault);
}  

如何连接到SITA Web服务?

1 个答案:

答案 0 :(得分:0)

您的代码中有两个错误:

  1. 您的URI不正确,应为“https://sws.sita.aero/sws”。
  2. 您的请求错误,应为SITA_SignInRQ
  3. 但我认为你仍然会收到“消息中没有签名!”来自SITA的错误。