如何在 PHP CURL 中使用 ECDHE 密码?

Posted

技术标签:

【中文标题】如何在 PHP CURL 中使用 ECDHE 密码?【英文标题】:How to use ECDHE ciphers in PHP CURL? 【发布时间】:2018-07-03 04:51:35 【问题描述】:

我用nmap扫描,结果如下:

看起来他们只支持 ECDHE,从 openssl_get_cipher_methods() 的输出看,没有 ECDHE 密码!所以我的问题是如何使用 php CURL 客户端连接到远程服务器?

这是我的示例 PHP 代码,它返回 false 并带有以下消息:

"列表中的未知密码: ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-沙", curl 错误编号代码为 59(无法使用指定的密码。)

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_SSL_CIPHER_LIST, "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES128-SHA"); 
curl_setopt($ch, CURLOPT_SSLVERSION, 6); 
curl_setopt($ch, CURLOPT_URL, "xxxxxxxxxxxxxxx"); 
var_dump(curl_exec($ch)); 
var_dump(curl_error($ch)); 
var_dump(curl_errno($ch));

我正在使用 PHP 5.3.29,openssl 1.0.1e-fips 2013 年 2 月 11 日

【问题讨论】:

你可以从升级 openssl 开始。从头开始 - 我刚刚用谷歌搜索了你的 OpenSSL 版本有多大 - 现在升级你的 OPENSSL! (除非您知道自己在做什么,否则不要在客户端上指定密码) 【参考方案1】:

“CURLOPT_SSL_CIPHER_LIST”的格式取决于您的 cURL 所链接的库。如果您在 RedHat 派生的 Linux 上运行,它是 NSS 而不是 GNUTLS (Ubuntu) 或 OpenSSL,因此您需要相应地转换名称。

以下问题应该对您有所帮助:

https://unix.stackexchange.com/questions/208437/how-to-convert-ssl-ciphers-to-curl-format

【讨论】:

【参考方案2】:

我找到了根本原因,我正在使用 NSS 包 3.19 运行 CentOS。默认情况下,此版本不启用 ECC 密码(ECDHE 是 ECC 密码之一),升级到 NSS 3.21+ 后修复。

https://bugzilla.mozilla.org/show_bug.cgi?id=1205688
https://developer.mozilla.org/en-US/docs/Mozilla/Projects/NSS/NSS_3.21_release_notes
https://tools.ietf.org/html/rfc4492

【讨论】:

以上是关于如何在 PHP CURL 中使用 ECDHE 密码?的主要内容,如果未能解决你的问题,请参考以下文章

Curl:如何传递包含百分号的密码

Openssl密码套件解释

如何使用 php curl 重定向来自 api 的发布数据?

使用 PHP 的 CURL 不显示响应

如何在Firebase上为cURL添加身份验证系统?

如何使用curl在php中调试get请求