я использовал nmap
для сканирования, это результат:
Похоже, они поддерживают только ECDHE, из вывода openssl_get_cipher_methods()
нет ECDHE шифра! Итак, мой вопрос, как я могу подключиться к удаленному серверу с помощью клиента PHP CURL?
Это мой пример кода PHP, который возвращается ложный с сообщением:
«Неизвестный шифр в списке:
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- ША»,
код ошибки 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 11 февраля 2013 г.
Формат CURLOPT_SSL_CIPHER_LIST зависит от библиотеки, с которой связан ваш cURL. Если вы работаете в Linux на основе RedHat, то это NSS, а не GNUTLS (Ubuntu) или OpenSSL, поэтому вам нужно будет соответствующим образом преобразовать имена.
Следующий вопрос должен помочь вам:
https://unix.stackexchange.com/questions/208437/how-to-convert-ssl-ciphers-to-curl-format
Я нашел основную причину, я запускаю CentOS с пакетом NSS 3.19. По умолчанию эта версия не включает шифры 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