【问题标题】:PHP Soap call through https通过 https 调用 PHP Soap
【发布时间】:2014-03-09 00:33:07
【问题描述】:

我在使用 SOAP 运行方法时遇到问题。我正在使用 Apache 和 PHP。

这是 PHP 代码:

$opts = array(
    'ssl' => array('ciphers'=>'RC4-SHA')
);

ini_set('soap.wsdl_cache_enabled',0);
ini_set('soap.wsdl_cache_ttl',0);

$client = new SoapClient('https://host?wsdl', array (
'stream_context' => stream_context_create($opts),
"trace" => 1,
"exceptions" => 0,
"connection_timeout"=>2000));
var_dump($client->__getFunctions());

$params = array ("key" => "value");
$result = $client->availabeFunction($params);
var_dump($result);

__getFunctions() 它返回给我所有可用的功能。

然后当我尝试使用参数调用可用函数时。

它返回一个错误消息:

public 'faultstring' => string 'Could not connect to host' (length=25)
public 'faultcode' => string 'HTTP' (length=4)

所以我认为由于某些原因是通过 HTTP 连接,而不是通过 HTTPS。

我查看了网络,在某些情况下,他们使用带有 .pem 文件的 local_cert 值。

它必须拥有它吗?还是我错过了其他东西?

【问题讨论】:

    标签: php apache soap ssl https


    【解决方案1】:

    这是一个 openssl 库错误。

    首先尝试通过添加此参数来禁用 SSL 检查

    "stream_context" => stream_context_create(
        array(
            'ssl' => array(
                'verify_peer'       => false,
                'verify_peer_name'  => false,
            )
        )
    )
    

    接下来尝试在位置链接中不使用 ?wsdl,尝试使用类似 .wsdl

    【讨论】:

    • 可以确认这适用于我的情况,相同的脚本在 5.4 和 5.5 中运行良好,我只需要添加 'verify_peer_name' => falseverify_peer 即可让 5.6 运行。
    【解决方案2】:

    解决方案比我想象的要容易得多:

    ini_set('soap.wsdl_cache_enabled',0);
    ini_set('soap.wsdl_cache_ttl',0);
    
    $location = 'https://host';
    
    $client = new SoapClient($location . '?wsdl', array (
    "trace" => 1,
    "exceptions" => 0,
    "connection_timeout"=>2000,
    "location"=>$location // <- this was the reqiured parameter
    ));
    

    其他一切都和以前一样。 这是由 WSDL 文件配置引起的,它不是 https URL,而是 http。

    【讨论】:

    • 虽然这个“有效”,但您绝对不要想要这样做。为什么?因为https:// 包装器在 PHP 5.6 之前默认禁用对等证书验证。通过消除您基本上说过的 ssl 上下文,“我不在乎谁在此传输的另一端,我完全信任他们”。如果您正在处理数据,那么您不会’不希望我能够阅读或修改这不是正确的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-03-02
    • 2020-11-13
    • 2017-05-09
    • 1970-01-01
    • 2011-08-17
    • 1970-01-01
    • 2018-07-09
    • 1970-01-01
    相关资源
    最近更新 更多