如何在php中为curl添加密码?

Ben*_*ird 5 php ssl curl openssl nss

我正在尝试使用 php curl 连接到站点,但收到错误“无通用加密算法”。进一步调查,我认为这与NSS有关?我发现从命令行中,我可以重现错误(所以问题肯定出在 curl 而不是 php 包装器),但是如果我设置了 --ciphers ecdhe_ecdsa_aes_128_sha 那么它就可以工作:

[ec2-user@ip-10-181-165-22 current]$ curl -I https://sslspdy.com
curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).

[ec2-user@ip-10-181-165-22 current]$ curl -I --ciphers ecdhe_ecdsa_aes_128_sha https://sslspdy.com
HTTP/1.1 200 OK
Server: nginx centminmod
Content-Type: text/html; charset=utf-8
Connection: close
Vary: Accept-Encoding
Strict-Transport-Security: max-age=31536000; includeSubdomains
Date: Sat, 07 Feb 1970 22:34:32 GMT
X-Page-Speed: ngx_pagespeed
Cache-Control: max-age=0, no-cache
Run Code Online (Sandbox Code Playgroud)

所以我的问题是,

  1. 为什么会这样?我无法在网上找到有关 ssl 密码如何在 curl 中工作的解释;似乎每一页都是在假设读者已经是该领域的专家的情况下编写的——不幸的是,像“你可能正在使用 NSS,所以尝试将 PKCS 切换为 FIPS”这样的句子对我来说是完全无法理解的,谷歌搜索将只解释单个组件(通常参考 20 年前的标准),而不是它们之间的关系。

  2. 有什么办法可以让 curl 告诉我它正在尝试哪些密码以及服务器将接受哪些密码?我试过在ssllabs上查找服务器,但似乎是说服务器接受所有密码,但显然不接受。

  3. 我需要将哪些选项传递给 curl_setopt 以便我的 php 脚本能够连接到该服务器?

  4. 如果我将密码设置为这个,会破坏其他网站吗?有什么我可以做的,以便 curl 能够连接到所有安全站点,或者我是否必须手动迭代不同的密码以尝试每个密码以找出哪个有效?

Hal*_*yon 2

curl_setopt与使用CURLOPT_SSL_CIPHER_LIST

  • 我该给它什么密码?ecdhe_ecdsa_aes_128_sha?这不会破坏其他使用不同密码的网站吗? (2认同)