Использование curl на чистой ванильной Fedora 21 для получения сайта, размещенного через службу https cloudflare, дает ошибку:
curl https://www.opencpu.org
>> curl: (35) Cannot communicate securely with peer: no common encryption algorithm(s).
Также:
curl https://www.cloudflare.org
>> curl: (51) Unable to communicate securely with peer: requested domain name does not match the server's certificate.
Эта проблема появляется только в Fedora, но не в Ubuntu или Mac с той же версией curl. Полагаю, это должно быть связано с nns:
curl --version
>> curl 7.37.0 (x86_64-redhat-linux-gnu) libcurl/7.37.0 NSS/3.17.3 Basic ECC zlib/1.2.8 libidn/1.28 libssh2/1.4.3
certutil -L
>> certutil: function failed: SEC_ERROR_LEGACY_DATABASE: The certificate/key database is in an old, unsupported format.
Есть предположения, что я делаю не так?
Общим фактором для обоих этих сайтов является то, что они используют SSL-сертификаты ECC для защиты своих https-соединений, а не традиционные сертификаты RSA, используемые большинством сайтов. В настоящее время они очень редки, но ожидается, что в будущем их популярность возрастет.
Обе используемые версии curl и NSS были созданы с использованием ECC и поэтому должны поддерживать эти сертификаты, поэтому я думаю, что вы столкнулись с ошибкой в Fedora и должны сообщить об этом. А связанная ошибка был недавно исправлен в RHEL 7.
В качестве обходного пути вы можете использовать wget
вместо того curl
, у которого нет проблем с подключением к этим сайтам (хотя последний возвращает ошибку 409 Conflict).
Ошибка Fedora находится на https://bugzilla.redhat.com/show_bug.cgi?id=1185708
Причина в том, что curl использует NSS и не хочет отклоняться от других программ, использующих NSS.
В настоящее время не исправлено по состоянию на июль 2015 года в Fedora 22
Пожалуйста попробуйте
bash
yum update nss