![Ubuntu16.04 : Nginx 1.10 : Nginx обслуживает информацию о нескольких сертификатах. SSL отлично работает в браузере, но возникают проблемы с curl. Ошибка cURL 51](https://rvso.com/image/696995/Ubuntu16.04%20%3A%20Nginx%201.10%20%3A%20Nginx%20%D0%BE%D0%B1%D1%81%D0%BB%D1%83%D0%B6%D0%B8%D0%B2%D0%B0%D0%B5%D1%82%20%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D1%8E%20%D0%BE%20%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85%20%D1%81%D0%B5%D1%80%D1%82%D0%B8%D1%84%D0%B8%D0%BA%D0%B0%D1%82%D0%B0%D1%85.%20SSL%20%D0%BE%D1%82%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%20%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%B0%D0%B5%D1%82%20%D0%B2%20%D0%B1%D1%80%D0%B0%D1%83%D0%B7%D0%B5%D1%80%D0%B5%2C%20%D0%BD%D0%BE%20%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%B0%D1%8E%D1%82%20%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D1%8B%20%D1%81%20curl.%20%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20cURL%2051.png)
У меня есть несколько сайтов на сервере Ubuntu (16.04) с nginx/1.10.0 + letsencrypt.
SSL работает отлично и идеально выглядит в браузере. Но наше приложение разработчиков, которое использует запрос curl (с SSL), и оно сталкивается с ошибкой, как
Update Failed: Download failed. cURL error 51: SSL: certificate subject name 'domain2.com' does not match target host name 'domain1.com'
и при проверке с помощью SSLLABS он показал A_grade, но он загружает несколько сертификатов (сертификат другого домена на том же сервере)
Certificate #1: RSA 2048 bits (SHA256withRSA)
и
Certificate #2: RSA 2048 bits (SHA256withRSA) No SNI
а по второму сертификату имеются следующие ошибки.
Common names domain2.com MISMATCH
Trusted No NOT TRUSTED
Ошибка Curl также говорила о втором доменном имени.
cURL error 51: SSL: certificate subject name 'domain2' does not match target host name 'domain1'
domain2 — это совершенно другой сайт. Не знаю, как nginx отправляет свою информацию вместе с domain1.
Я также протестировал тот же сценарий на других серверах, создав домен с помощью Letsencrypt SSL, и у всех возникла та же проблема. При проверке с помощью SSLlabsssllabs-проверкаон может получить данные сертификата домена2 вместе с доменом1. Тем не менее, класс домена1 - A. также безопасен на всех других сайтах проверки.
и если я проверяю домен2 с помощью SSLlabs, он извлечет сертификат любого другого домена, который находится на том же сервере. (но если есть домены A, B, C, D, то проверка SSL одного из доменов извлечет только один сертификат. Это не проблема, а у всех остальных будет эта проблема.)
Скриншот прилагается. (длинный скриншот на всю страницу). Думаю, это прояснит ситуацию :(
**Я не мог использовать небезопасный запрос Curl в приложении, которое игнорировало бы эту проблему и делало бы запрос curl успешным. Если у кого-то есть идеи по этому поводу, пожалуйста, помогите. Я потратил много часов за этим, все еще...
Вышеуказанная проблема касается плагина Wordpress, поэтому невозможно добавить определенный параметр вместе с curl. (это из ядра WP)
Заранее спасибо.
решение1
В используемой версии curl, похоже, отсутствуют основные функцииСНИподдержка. SNI необходим, когда несколько доменов с SSL размещены на одном IP-адресе.
По сути, у вас есть три варианта:
- обновить curl до версии, которая поддерживает SNI.
Поддержка этого былавведено в версии 7.18.1. - добавьте параметр хоста самостоятельно на своих клиентах:
-H "Host: domain1.com"
- Переместите домен на другой IP-адрес. Таким образом, не требуется никаких изменений на клиенте.