Cloudflare 将 ECDHE_ECDSA 和 AES_128_GCM 密码套件用于其 https 证书。使用 PHP cURL 时,您可以指定密码套件:
curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'ecdhe_ecdsa_aes_128_sha');
但是,如果 cURL 请求请求的不是 ecdhe_ecdsa_aes_128_sha,那对我没有帮助。
设置了以下 Apache 配置,但 PHP cURL 似乎不遵守此配置:
SSLHonorCipherOrder On
SSLCipherSuite ECDH+AESGCM:DH+AESGCM:ECDH+AES256:DH+AES256:ECDH+AES128:DH+AES:ECDH+3DES:DH+3DES:RSA+AESGCM:RSA+AES:RSA+3DES:!aNULL:!MD5:!DSS
有没有办法为 PHP cURL 指定密码套件顺序?
环境信息:
[vagrant@devopsgroup ~]$ php -i | grep SSL
SSL => Yes
SSL Version => NSS/3.15.4
OpenSSL support => enabled
OpenSSL Library Version => OpenSSL 1.0.1e-fips 11 Feb 2013
OpenSSL Header Version => OpenSSL 1.0.1e-fips 11 Feb 2013
Native OpenSSL support => enabled
最佳答案
您可以像上面建议的那样指定希望 cURL 使用 CURLOPT_SSL_CIPHER_LIST
的密码套件,但是如果 cURL 是针对 OpenSSL 编译的,那么您需要以 OpenSSL 使用的格式指定密码。
Apache 配置对 cURL 没有影响。
由于 cURL 是使用 OpenSSL 构建的,请尝试使用 OpenSSL ciphers 中的密码名称.
例如:
curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'ECDHE-RSA-AES128-GCM-SHA256,ECDHE-ECDSA-AES128-SHA');
这个答案也很有用:https://unix.stackexchange.com/questions/208437/how-to-convert-ssl-ciphers-to-curl-format
关于PHP cURL SSL 密码套件顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34243096/