PHP cURL SSL密码套件订单


PHP cURL SSL Cipher Suite Order

Cloudflare为其https证书使用ECDHE_ECDSA和AES_128_GCM的密码套件。使用PHP cURL时,可以指定密码套件:

curl_setopt($curl, CURLOPT_SSL_CIPHER_LIST, 'ecdhe_ecdsa_aes_128_sha');

但是,如果cURL请求请求的不是ecdhe_ecdsa_es_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密码中的密码名称。

例如:

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