繁体   English   中英

cURL 错误 35 - 与 api.rkd.reuters.com:443 相关的未知 SSL 协议错误

[英]cURL error 35 - Unknown SSL protocol error in connection to api.rkd.reuters.com:443

从开发机器(mac)通过 PHP 中的 cURL 连接到此没有问题,但在 Ubuntu 中,我收到此错误。 我已经在本地机器和 Amazon AWS 实例上尝试过。 我用谷歌搜索和谷歌搜索,并不断来到砖墙。 没有防火墙限制,这完全是个谜。 php5-curl IS安装在ubuntu中,我只是没有任何想法。 我运行了这个命令:

curl -v https://api.rkd.reuters.com/api/2006/05/01/TokenManagement_1.svc/Anonymous

并得到了这个输出,没有任何解决方案的线索。 还安装了 OpenSSL。

* About to connect() to api.rkd.reuters.com port 443 (#0)
*   Trying 159.220.40.240... connected
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* Unknown SSL protocol error in connection to api.rkd.reuters.com:443 
* Closing connection #0
curl: (35) Unknown SSL protocol error in connection to api.rkd.reuters.com:443

欢迎对此提出任何想法

我遇到了这个问题,我通过将 curl SSL 版本设置为版本 3 来修复它

curl_setopt($ch, CURLOPT_SSLVERSION,3);

显然,服务器开始需要 SSL 版本 3,此设置导致带有 SSL 的 cURL 再次开始工作。

修好了! 这是 Ubuntu 12.04 的一个已知问题

这些说明

http://willbradley.name/2012/10/workaround-for-php-error-in-ubuntu-12-04-soapclient-ssl-crypto-enabling-timeout/

-- 取消那个,它只是禁用了异常,这仍然不起作用! 帮助!

-编辑 - 这是我最终修复它的方式!

我从 5.4.3 升级到 PHP 5.5 并在我的调用中设置了以下选项,修复了它:

$options = array('ssl_method' => SOAP_SSL_METHOD_SSLv3,'soap_version' => SOAP_1_2);
$sc = new SoapClient('https://my-url.com/call/', $options);

升级是必要的,因为 PHP 版本 < 5.5 中不存在常量 SOAP_SSL_METHOD_SSLv3,不幸的是,当时的 Ubuntu Server 只允许通过 apt-get update php5 升级到 5.4.3。 我手动安装了更高版本,现在工作正常。

我遇到了同样的问题,不幸的是,主机不愿意升级到 php 5.5。

我通过创建一个扩展 php 的 SoapClient 以使用 cURL 的新类来解决它:

/**
 * New SoapClient class.
 * This extends php's SoapClient,
 * overriding __doRequest to use cURL to send the SOAP request.
 */
class SoapClientCurl extends SoapClient {

  public function __doRequest($request, $location, $action, $version, $one_way = NULL) {
$soap_request = $request;
$header = array(
  'Content-type: application/soap+xml; charset=utf-8',
  "Accept: text/xml",
  "Cache-Control: no-cache",
  "Pragma: no-cache",
  "SOAPAction: \"$action\"",
  "Content-length: " . strlen($soap_request),
);
$soap_do = curl_init();
$url = $location;
$options = array(
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HEADER => FALSE,
  //CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_SSL_VERIFYHOST => 0,
  CURLOPT_SSL_VERIFYPEER => FALSE,
  CURLOPT_RETURNTRANSFER => TRUE,
  //CURLOPT_USERAGENT => 'Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)',
  CURLOPT_VERBOSE => true,
  CURLOPT_POST => TRUE,
  CURLOPT_URL => $url,
  CURLOPT_POSTFIELDS => $soap_request,
  CURLOPT_HTTPHEADER => $header,
  CURLOPT_FAILONERROR => TRUE,
  CURLOPT_SSLVERSION => 3,
);

curl_setopt_array($soap_do, $options);
$output = curl_exec($soap_do);
if ($output === FALSE) {
  $err = 'Curl error: ' . curl_error($soap_do);
}
else {
  ///Operation completed successfully
}
curl_close($soap_do);

// Uncomment the following line to let the parent handle the request.
//return parent::__doRequest($request, $location, $action, $version);
return $output;
  }

}

错误 : CURL 错误: 35 - OpenSSL SSL_connect: SSL_ERROR_SYSCALL 连接到 httpapi.com:443 (IP: 162.xxx & 204.xxx)

WHMCS 的情况:

您可以联系您的主机将 IP 地址列入白名单以使用他们的 API。

通过将 curl-ca-bundle.crt 添加到 curl.exe 旁边的文件夹来修复

我正在使用 Fefora 33,其他用户提出的解决方案对我不起作用。 在我的情况下,问题是由 Fedora 33 上的更改引起的,默认情况下禁用了 SHA-1 签名( https://fedoraproject.org/wiki/Changes/StrongCryptoSettings2 )。

我解决了它改变加密政策:

update-crypto-policies --set DEFAULT:FEDORA32

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM