gpt4 book ai didi

php - 如何在 php 中添加密码以 curl ?

转载 作者:可可西里 更新时间:2023-11-01 00:08:44 26 4
gpt4 key购买 nike

我正在尝试使用 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

所以我的问题是,

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

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

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

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

最佳答案

  1. Why is this happening? I have not been able to find an explanation online as to how the ssl ciphers work in curl

这取决于一些事情。客户端和服务器库、客户端和服务器配置等。您需要提供更多详细信息。


  1. Is there any way I can make curl tell me which ciphers

使用正确的工具来完成工作。在这种情况下,它是一个更新的 sslscan .


  1. What options do I need to pass to curl_setopt so that my php script is able to connect to this server?

CURLOPT_SSL_CIPHER_LIST


  1. If I set the cipher to this, will that break other sites?

也许吧。这取决于特定站点的配置。

理想情况下,您可以选择 12 或 16 个您认可的密码套件,然后使用它们而不是一个。 12 或 16 涵盖了您在互联网上遇到的大多数网站。

这是我通常使用的列表。它来自 Which Cipher Suites to enable for SSL Socket? :

  • TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_DHE_DSS_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_DHE_DSS_WITH_AES_128_GCM_SHA256
  • TLS_DHE_DSS_WITH_AES_256_CBC_SHA256
  • TLS_DHE_RSA_WITH_AES_128_CBC_SHA
  • TLS_DHE_DSS_WITH_AES_128_CBC_SHA
  • TLS_RSA_WITH_AES_256_CBC_SHA256
  • TLS_RSA_WITH_AES_256_CBC_SHA
  • TLS_RSA_WITH_AES_128_CBC_SHA256
  • TLS_RSA_WITH_AES_128_CBC_SHA

我想放弃 TLS_RSA_* 密码套件,因为它们是 key 传输,但我需要它们用于我遇到的那些较旧的 IIS 服务器。

从下面的扫描结果可以看出,这个列表与服务器的列表相交。


请注意,您没有指定,比如 TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384。相反,在 OpenSSL 中,您为套件指定 OpenSSL 的名称 ECDHE-ECDSA-AES256-SHA384。您可以在 documentation for openssl ciphers 找到 OpenSSL 名称.

对于 OpenSSL,您还可以使用字符串 "HIGH:!aNULL:!MD5:!RC4:!PSK:!SRP"。这将为您提供大约 40 或 50 个相当不错的选择。

您可以运行 OpenSSL ciphers 命令来查看列表是什么:

$ openssl ciphers -v 'HIGH:!aNULL:!MD5:!RC4:!PSK:!SRP'
ECDHE-RSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AESGCM(256) Mac=AEAD
ECDHE-ECDSA-AES256-GCM-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AESGCM(256) Mac=AEAD
ECDHE-RSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA384
ECDHE-ECDSA-AES256-SHA384 TLSv1.2 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA384
ECDHE-RSA-AES256-SHA SSLv3 Kx=ECDH Au=RSA Enc=AES(256) Mac=SHA1
ECDHE-ECDSA-AES256-SHA SSLv3 Kx=ECDH Au=ECDSA Enc=AES(256) Mac=SHA1
...

您可以使用 sslscan 的更新版本确定可用的密码套件:

$ sslscan --no-failed sslspdy.com
...
Testing SSL server sslspdy.com on port 443

Supported Server Cipher(s):
Accepted TLSv1 256 bits ECDHE-ECDSA-AES256-SHA
Accepted TLSv1 128 bits ECDHE-ECDSA-AES128-SHA
Accepted TLSv1.1 256 bits ECDHE-ECDSA-AES256-SHA
Accepted TLSv1.1 128 bits ECDHE-ECDSA-AES128-SHA
Accepted TLSv1.2 256 bits ECDHE-ECDSA-AES256-GCM-SHA384
Accepted TLSv1.2 256 bits ECDHE-ECDSA-AES256-SHA384
Accepted TLSv1.2 256 bits ECDHE-ECDSA-AES256-SHA
Accepted TLSv1.2 128 bits ECDHE-ECDSA-AES128-GCM-SHA256
Accepted TLSv1.2 128 bits ECDHE-ECDSA-AES128-SHA256
Accepted TLSv1.2 128 bits ECDHE-ECDSA-AES128-SHA

Prefered Server Cipher(s):
TLSv1 128 bits ECDHE-ECDSA-AES128-SHA
TLSv1.1 128 bits ECDHE-ECDSA-AES128-SHA
TLSv1.2 128 bits ECDHE-ECDSA-AES128-GCM-SHA256

关于php - 如何在 php 中添加密码以 curl ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30665131/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com