Не удается установить ssl соединение linux

Обновлено: 02.07.2024

Я пытаюсь wget в свой собственный ящик, и это не может быть внутренний адрес в wget (так говорит другой разработчик).

Когда я вижу, я получаю это:

Я считаю, что это потому, что у меня нет настройки сертификата должным образом. Использование openssl:

Хотя если я делаю ту же команду на другом сайте, она показывает весь сертификат.

Возможно, сертификат ssl никогда не был настроен в файле conf на Apache для этого домена?

Если так, что я должен указать в виртуальном хосте? Есть ли другая альтернатива, кроме указания --no-check-certificate , потому что я не хочу этого делать?

SSL23_GET_SERVER_HELLO: неизвестный протокол

Неясно, пытались ли вы передать --no-check-certificate или нет. Я был бы довольно удивлен, если бы это сработало.

В любом случае, просмотр журнала ошибок Apache также может дать некоторое представление.

В моем случае я не включил сайт «default-ssl». В папке /etc/Apache2/sites-enabled был указан только «000-default».

Включить сайт SSL на Ubuntu 14 LTS, Apache 2.4.7:

Просто быстрая заметка (и возможная причина).

Вы можете иметь совершенно правильную настройку VirtualHost с помощью _default_:443 и т.д. В файле Apache .conf.

Но . Если есть даже один файл .conf с неправильными настройками, который также прослушивает порт 443, то это приведет к отключению всей системы SSL.

Поэтому, если вы уверены, что ваш файл .conf правильный, попробуйте отключить другие файлы .conf сайта в sites-enabled .

Есть несколько возможностей:

  1. На вашей рабочей станции нет сертификата корневого ЦС, используемого для подписи сертификата вашего сервера. Как именно вы это исправите, зависит от того, какую ОС вы используете, какой релиз и т.д. (Я подозреваю, что это не связано)
  2. Ваш сертификат не установлен должным образом. Если ваш SSL-сертификат требует наличия промежуточного сертификата, а вы его не настроили, вы можете получить эти предупреждения.
  3. Вы уверены, что включили SSL на порту 443?

Для начала, чтобы устранить (3), что произойдет, если вы telnet к этому порту?

Если предположить, что это не так (3), то, в зависимости от ваших потребностей, вы можете игнорировать эти ошибки и просто пройти --no-certificate-check. Вы, вероятно, захотите использовать обычный браузер (который обычно будет напрямую связывать корневые сертификаты) и посмотреть, насколько все будет хорошо.

Если вы хотите проверить сертификат вручную, опубликуйте более подробную информацию из вывода openssl s_client . Или используйте openssl x509 -text -in /path/to/cert , чтобы распечатать его на свой терминал.

Для меня DNS-имя моего сервера было добавлено в/etc/hosts, и оно было сопоставлено с 127.0.0.1, что привело к

SL23_GET_SERVER_HELLO: неизвестный протокол

Удаление сопоставления моего реального имени DNS с 127.0.0.1 решило проблему.

Предлагаем разобраться со способами устранения подобных ошибок.

Что такое SSL?

SSL (Secure Socket Layer) — это интернет-протокол для создания зашифрованного соединения между пользователем и сервером, который гарантирует безопасную передачу данных.

Когда пользователь заходит на сайт, браузер запрашивает у сервера информацию о наличии сертификата. Если сертификат установлен, сервер отвечает положительно и отправляет копию SSL-сертификата браузеру. Затем браузер проверяет сертификат, название которого должно совпадать с именем сайта, срок действия сертификата и наличие корневого сертификата, выданного центром сертификации.

Причины возникновения ошибок SSL-соединения

Когда сертификат работает корректно, адресная строка браузера выглядит примерно так:


Но при наличии ошибок она выглядит несколько иначе:


Существует множество причин возникновения таких ошибок. К числу основных можно отнести:

  • Некорректную дату и время на устройстве (компьютер, смартфон, планшет и т.д.);
  • Ненадежный SSL-сертификат;
  • Брандмауэр или антивирус, блокирующие сайт;
  • Включенный экспериментальный интернет-протокол QUIC;
  • Отсутствие обновлений операционной системы;
  • Использование SSL-сертификата устаревшей версии 3.0;
  • Появление ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера.

Давайте рассмотрим каждую из них подробнее.

Проблемы с датой и временем


Для исправления этой ошибки достаточно установить на устройстве актуальное время. После этого необходимо перезагрузить страницу или браузер.

Ненадежный SSL-сертификат


Одной из причин появления такой ошибки, как и в предыдущем случае, может стать неправильное время. Однако есть и вторая причина — браузеру не удается проверить цепочку доверия сертификата, потому что не хватает корневого сертификата. Для избавления от такой ошибки необходимо скачать специальный пакет GeoTrust Primary Certification Authority, содержащий корневые сертификаты. После скачивания переходим к установке. Для этого:

  • Нажимаем сочетание клавиш Win+R и вводим команду certmgr.msc, жмем «Ок». В Windows откроется центр сертификатов.
  • Раскрываем список «Доверенные корневые центры сертификации» слева, выбираем папку «Сертификаты», кликаем по ней правой кнопкой мышки и выбираем «Все задачи — импорт».


  • Запустится мастер импорта сертификатов. Жмем «Далее».


  • Нажимаем кнопку «Обзор» и указываем загруженный ранее сертификат. Нажимаем «Далее»:


  • В следующем диалоговом окне указываем, что сертификаты необходимо поместить в доверенные корневые центры сертификации, и нажимаем «Далее». Импорт должен успешно завершиться.


После вышеперечисленных действий можно перезагрузить устройство и проверить отображение сайта в браузере.

Брандмауэр или антивирус, блокирующие сайт

Некоторые сайты блокируются брандмауэром Windows. Для проверки можно отключить брандмауэр и попробовать зайти на нужный сайт. Если SSL-сертификат начал работать корректно, значит дело в брандмауэре. В браузере Internet Explorer вы можете внести некорректно работающий сайт в список надежных и проблема исчезнет. Однако таким образом вы снизите безопасность своего устройства, так как содержимое сайта может быть небезопасным, а контроль сайта теперь отключен.



Включенный экспериментальный протокол QUIC

QUIC — это новый экспериментальный протокол, который нужен для быстрого подключения к интернету. Основная задача протокола QUIC состоит в поддержке нескольких соединений. Вы можете отключить этот протокол в конфигурации вашего браузера.

Показываем как отключить QUIC на примере браузера Google Chrome:


Этот способ работает и в Windows и в Mac OS.

Отсутствие обновлений операционной системы

Проблемы с SSL-сертификатами могут возникать и из-за того, что на вашей операционной системе давно не устанавливались обновлений. Особенно это касается устаревших версий Windows (7, Vista, XP и более ранние). Установите последние обновления и проверьте работу SSL.

Использование SSL-сертификата версии 3.0

Некоторые сайты используют устаревший SSL-протокол версии 3.0, который не поддерживают браузеры. По крайней мере, по умолчанию. Чтобы браузер поддерживал устаревший SSL необходимо сделать следующее (на примере браузера Google Chrome):

  • Откройте браузер и перейдите в раздел «Настройки».
  • Прокрутите страницу настроек вниз и нажмите «Дополнительные».
  • В разделе «Система» найдите параметр «Настройки прокси-сервера» и кликните на него.


  • Откроется окно. Перейдите на вкладку «Дополнительно».
  • В этой вкладке вы увидите чекбокс «SSL 3.0».


  • Поставьте галочку в чекбоксе, нажмите кнопку «Ок» и перезагрузите браузер.

Ошибки «Invalid CSR» при генерации сертификата из панели управления облачного провайдера

В процессе активации сертификата можно столкнуться с ошибкой «Invalid CSR». Такая ошибка возникает по следующим причинам:

Я попытался загрузить изображение через wget, но получил ошибку: не удалось установить SSL-соединение.

  1. использование Ubuntu 12.04.4 LTS( GNU / Linux 3.8.0-44-generic x86_64), GNU Wget 1.13.4 построенный на linux-gnu, я смог загрузить изображение используя код выше. Никакая ошибка.
  2. используя Ubuntu 14.04 LTS (GNU / Linux 3.13.0-24-generic x86_64), GNU Wget 1.15, построенный на linux-gnu, я не смог загрузить изображение с помощью код выше.

Ubuntu 14.04 или wget 1.15 несовместимы с веб-сайтами TLS 1.0? Нужно ли устанавливать / загружать любую библиотеку / программное обеспечение для включения этого соединения?

. сейчас это происходит только с сайтом, который я тестирую. Я не могу опубликовать его здесь, потому что это конфиденциально.

тогда я думаю, что это один из сайтов, который несовместим с TLS1.2. Openssl, используемый в 12.04, не использует TLS1.2 на стороне клиента, а с 14.04 он использует TLS1.2 что может объяснить разницу. Чтобы обойти попробуйте явно указать --secure-protocol=TLSv1 . Если это не поможет проверить, можете ли вы получить доступ к сайту с помощью openssl s_client -connect . (вероятно, нет) и с openssl s_client -tls1 -no_tls1_1, -no_tls1_2 . .

обратите внимание, что это могут быть другие причины, но это наиболее вероятно, и без получения доступа к сайту все это просто спекуляции в любом случае.

предполагаемая проблема подробно: обычно клиенты используют наиболее совместимое рукопожатие для доступа к серверу. Это SSLv23 рукопожатие, которое совместимо со старыми версиями SSL, но объявляет лучшую версию TLS, поддерживаемую клиентом, чтобы сервер мог выбрать лучшую версию. В этом случае wget объявит TLS1.2. Но есть некоторые сломанные серверы, которые никогда не предполагали, что однажды будет что-то вроде TLS1.2 и которые отказываются от рукопожатия, если клиент объявляет о поддержке этой горячей новой версии (с 2008 года!) вместо того, чтобы просто отвечать лучшей версией, поддерживаемой сервером. Для доступа к этим сломанным серверам клиент должен лгать и утверждать, что он поддерживает только TLS1.0 как лучшая версия.

Ubuntu 14.04 или wget 1.15 не совместим с TLS 1.0 веб-сайты? Нужно ли устанавливать / загружать любую библиотеку / программное обеспечение для включения этого соединения?

проблема сервера, а не клиента. Большинство браузеров работают вокруг этих сломанных серверов, повторяя попытку с более низкой версией. Большинство других приложений терпят неудачу постоянно, если первая попытка подключения терпит неудачу, т. е. они не понижаются сами по себе, и нужно принудительно использовать другую версию некоторыми настройками приложения.

вы должны использовать старую версию wget у меня была такая же проблема. я использовал wget 1.12.поэтому для решения этой проблемы есть 2 способа: Update wget или использовать curl

Если Вы доверяете хосту, либо добавьте действительный сертификат, укажите --no-check-certificate и добавить:

в некоторых редких случаях ваше системное время может быть не синхронизировано, поэтому аннулирование сертификатов.

В последнее время сделать это не очень сложно, потому что все популярные веб-серверы его поддерживают, а получить сертификат можно абсолютно бесплатно. В сегодняшней статье мы поговорим о том как настроить SSL в Nginx с сертификатом Lets Encrypt.

Настройка SSL в Nginx с Lets Encrypt

Я предполагаю, что у вас уже установлен веб-сервер Nginx. Дальше мы рассмотрим как создать виртуальный хост, установить все необходимые компоненты для получения сертификатов, а также настроить само SSL соединение.

Шаг 1. Настройка виртуального хоста

sudo vi /etc/nginx/conf.d/vps-losst-ru.conf

Затем проверьте конфигурацию Nginx:


И если всё верно, перезапустите веб-сервер:

sudo systemctl restart nginx

Убедиться что всё работает можно с помощью браузера или утилиты curl:


2. Установка Certbot

Для получения сертификатов LetsEncrypt официально рекомендовано использовать клиент Certbot. Установить программу можно из официальных репозиториев:

sudo apt install certbot certbot-python-nginx

Первый пакет устанавливает саму программу, а второй добавляет модуль для работы с Nginx. После установки можно его использовать.

3. Получение сертификата

Мы не будем устанавливать сертификат автоматически, а только сгенерируем его с помощью этой утилиты, а потом добавим вручную в Nginx. Для генерации и подписи сертификата используйте такую команду:



4. Настройка виртуального хоста для SSL

  • cert.pem - файл сертификата, использовать его мы не будем;
  • chain.pem - файл цепочки сертификата, тоже не будем использовать;
  • privkey.pem - приватный ключ сертификата, надо прописать в параметре ssl_certificate_key;
  • fullchain.pem - в нём объединено содержимое cert.pem и chain.pem, надо прописать в параметре ssl_certificate.

Для SSL надо создать отдельный файл виртуального хоста, в котором порт прослушивания будет 443, и будут присутствовать несколько директив настройки SSL:

sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf

После создания файла останется перезапустить Nginx:

sudo systemctl restart nginx

Уже на этом этапе всё должно работать.


5. Дополнительная безопасность

Чтобы сделать соединение SSL более безопасным надо отключить небезопасные протоколы и включить только надежные шифры. Для настройки протоколов используйте директиву ssl_protocols. На сегодняшний день самым безопасным считается TLS:

sudo vi /etc/nginx/conf.d/vps-losst-ru-ssl.conf

ssl_protocols TLSv1.2 TLSv1.3;

В примере я разрешаю только TLSv1.2 и TLSv1.3 для хорошей оценки от ssllabs, но в производственной системе возможно стоит разрешить всю линейку протоколов TLS, если вам нужна поддержка устройств не поддерживающих современные методы шифрования. Затем надо добавить шифры, которые мы хотим использовать:

И осталось сообщить, что следует использовать шифры, установленные сервером, а не клиентом:

После завершения настроек не забудьте перезапустить Nginx.

6. Проверка

Проверить параметры работы SSL можно с помощью сайта SSLlabs. Просто откройте такую ссылку в браузере, заменив домен сайта на свой:


Как видите, всё хорошо, и сайт получил оценку A. Сертификат SSL Nginx установлен и работает.

7. Обновление сертификата

Минус сертификатов от Lets Encrypt в том, что они актуальны только 90 дней. За 30 дней до истечения этого срока их рекомендуется перевыпускать. Для этого существует специальная команда:

Она проверяет все сертификаты, установленные в системе и перевыпускает те, что скоро будут просрочены. Чтобы настроить автоматический перевыпуск сертификатов просто добавьте эту команду в crontab:

30 2 * * 1 /usr/bin/certbot renew >> /var/log/le-renew.log

Эта команда будет выполнятся каждый понедельник в 2:30 и записывать свой вывод в файл /var/log/le-renew.log.

Выводы

В этой небольшой статье мы рассмотрели как выполняется настройка SSL Nginx с Lets Encrypt. Как видите, всё вполне выполнимо, несмотря на определённую сложность. А вы уже используете SSL? Планируете использовать? Напишите в комментариях!

Читайте также: