【问题标题】:PHP SOAP SSL problemsPHP SOAP SSL 问题
【发布时间】:2011-08-30 21:27:08
【问题描述】:

我正在尝试使用 NuSOAP 连接到安全的 SOAP 服务器。 (我给了内置 SOAP 库一个机会,但它的行为很奇怪,所以我切换到了 NuSOAP。)

这是我的代码:

require('application/libraries/nusoap/nusoap.php');
$soap = new nusoap_client('https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl', 'wsdl');
$soap->setCredentials('WS'.STORE_NUMBER.'._.1',
    PASSWORD,
    'certificate',
    array(
        'sslcertfile' => 'first_data/cert.pem',
        'sslkeyfile' => 'first_data/key.pem',
        'passphrase' => KEY_PASSPHRASE
    )
);
if($err = $soap->getError()) {
    die('Error: '.$err);
}
$result = $soap->call('fdggwsapi:FDGGWSApiOrderRequest', array('v1:Transaction' => '1'));
if($soap->fault) {
    echo 'Fault! <pre>';
    var_dump($result);
    echo '</pre>';
} else {
    if($err = $soap->getError()) {  
        die('Error: '.$err);
    } else {
        echo '<pre>';
        var_dump($result);
        die('</pre>');
    }
}

我收到以下错误:

Error: wsdl error: Getting https://ws.firstdataglobalgateway.com/fdggwsapi/services/order.wsdl - HTTP ERROR: cURL ERROR: 56: SSL read: error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert decrypt error, errno 0
url: https://ws.firstdataglobalgateway.com:443/fdggwsapi/services/order.wsdl
content_type: 
http_code: 0
header_size: 0
request_size: 163
filetime: -1
ssl_verify_result: 0
redirect_count: 0
total_time: 0.531131
namelookup_time: 0.00121
connect_time: 0.070608
pretransfer_time: 0.305044
size_upload: 0
size_download: 0
speed_download: 0
speed_upload: 0
download_content_length: -1
upload_content_length: 0
starttransfer_time: 0
redirect_time: 0

可能会出现什么问题?我怎么能调试这个?我在这里有点不合群。

【问题讨论】:

  • 你好?我也尝试过这样做,我得到了Error: operation fdggwsapi:FDGGWSApiOrderRequest not present in WSDL. 你也面临同样的问题吗?

标签: php soap ssl


【解决方案1】:

根据错误:

SSL read: error:1409441B:SSL routines:SSL3_READ_BYTES:tlsv1 alert 
decrypt error, errno 0

在我看来,PHP 库在读取您的 cert.pem 和 key.pem 文件时遇到了问题。这些文件可以有不同的格式。 Apache 要求这些是 PKCS12 格式,我猜 PHP 是一样的。如有必要,您可以使用名为“Keystore Explorer 4.0.1”的工具进行验证和转换。

您也可以使用 openssl 和以下命令验证密钥格式的有效性:

C:\Temp> openssl pkcs12 -info -in ksb_cert.p12

【讨论】:

  • 很可能我使用了错误的文件。这是给我的文件:
  • WS.key WS.key.pw.txt WS.ks WS.ks.pw.txt WS.p12 WS.p12.pw.txt WS.pem
  • 您能建议哪些将放在 sslkeyfile 和 sslcertfile 下吗?
  • 哦,还有,使用哪个 .txt 作为密码。
  • 好吧,您可以使用密钥库(其中应该包含公钥和私钥)或使用 .key(私钥)和公钥(.p12 或 .pem)。这取决于您的项目/代码如何设置读取密钥。我不是 PHP 程序员,所以在这种情况下我无法回答你。
【解决方案2】:

有了这个设置,我的客户终于可以工作了

$client = new nusoap_client($wsdlurl,'wdsl');
$client->setUseCURL(true);
$client->useHTTPPersistentConnection();
$client->setCurlOption(CURLOPT_SSL_VERIFYHOST, 0);
$client->setCurlOption(CURLOPT_SSL_VERIFYPEER, 0);
$client->setCurlOption(CURLOPT_RETURNTRANSFER, 1);
$client->setCurlOption(CURLOPT_SSLVERSION,3);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-07-29
    • 2018-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-02
    • 1970-01-01
    相关资源
    最近更新 更多