如何在 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 密码?的主要内容,如果未能解决你的问题,请参考以下文章