Устанавливаем SSL соединение с помощью Let’sEncrypt

Неожиданно был удивлен, когда после обновления гугл хром зашел в блог и увидел надпись «Возможно злоумышленники с данного домена пытаются похитить ваши пароли» :-) А потом вспомнил, что когда то прикручивал бесплатный SSL от стартком, который уже сейчас считается ненадежным в новейших версиях браузеров. Вот тут описывал как я подключал ssl+http2 и мимолетно указал на ссылку, где дают инфу по поводу StartCom и WoSign.

Что ж, не проблема. После этого принял решение переходить на Let’sEncrypt. Заходим по ssh в свой /root/ на сервере:

cd root
mkdir opt
mkdir opt/letsencrypt
cd opt/letsencrypt
git clone https://github.com/letsencrypt/letsencrypt

У меня в конфиге nginx для блога на ии корневая папка установлена как /web/, поэтому нижеследующий код в моем случае демонстрирует правильную опцию -w, webroot. Еще на время надо отключить запрет на просмотр скрытых файлов в конфиге, если он включен, так как при запуске скрипт создает директорию в webroot, .well-known на время его отработки и далее использует для аутентификации домена. (поставить первым перед всеми остальными location)

location ~ /.well-known {
    allow all;
}

В общем случае скрипт, который получает сертификат такой:

./letsencrypt-auto certonly --webroot -w [путь к вашему корню сайта] -d [домен]

В моем случае это так:

./letsencrypt-auto certonly --webroot -w /var/www/user/zharikov.site/web/ -d zharikov.site -d www.zharikov.site

После чего будут автоматически установлены все библиотеки и зависимости для работы. А в папке /etc/letsencrypt/live/ваш домен/ будут сертификат и приватный ключ (с символическими ссылками). Их надо прописать в ваш конфиг для nginx:

Clip2net_170318103125-min

ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;

Делаем

service nginx restart

Заходим на сайт и радуемся:

Clip2net_170317155148-min

Но может возникнуть ситуация, судя по многочисленным топикам в соответствующих форумах, что, ну никак не получается использовать DNS-аутентификацию или настроенный веб-сервер для обслуживания /.well-known/acme-challenge. В таком случае останавливаем веб-сервер, делаем команду:

./certbot-auto certonly --standalone --preferred-challenges http -d [домен]

И снова запускаем сервер. Произошло то же самое получение сертификатов.

Для обновления, по истечению 90 дней:

./letsencrypt-auto certonly --renew-by-default -w [путь к вашему корню сайта] -d [домен]

Потом, если появляется окно диалога, о том, как вы желаете произвести аутентификацию ACME CA, выбираем пункт Nginx Web Server plugin - Alpha (nginx), если веб-сервер nginx.

Или так еще можно:

./letsencrypt-auto renew

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

После чего автоматом обновятся символические ссылки на ключи в /etc/letsencrypt/live/ваш домен/

Но лучше, конечно, настроить автоматическое обновление этого дела, для чего вешаем задачу на крон. Зайдем crontab -e, можно как то так, каждый месяц обновлять к примеру:

## letsencrypt
@monthly [path-to-your]/letsencrypt-auto certonly --renew-by-default --webroot -w [path-to-web-root] -d [domain]
@monthly service nginx reload

Или так еще (более частое, выполнение каждый понедельник, в пол второго ночи)

30 1 * * 1 /root/opt/letsencrypt/./letsencrypt-auto renew
30 1 * * 1 service nginx restart

Вот и все! Да здравствует вечный SSL!



Похожие заметки:

Да здравствует Ябунта!

Да, настал момент! Попиарю немного вот этого хостера, ибо есть за что. Переустановил ОС на VDS, поставил новенькую Ubuntu-16.04 c nginx + php-fpm (про прирост производительности можно не говорить, это факт)

Открыть здесь

1048

Веб-разработка

Займусь вашим проектом, если вам нужен специалист в области веб-разработки

Открыть здесь

362

Настройка сервера

Услуги » Настройка веб-сервера

Регистрация, настройка с моей стороны VDS сервера в соответствии с выбраным вами тарифом

Открыть здесь

335


Перед тем как писать комментарии, рекомендую ознакомиться:

Markdown синтаксис »

Оформление кода »

Нужна аватарка »

Комментарии


6
avatar

Илья сказал 21-05-2017 в 12:22


Добрый день! Подскажите пожалуйста. Как раз несколько дней пытаюсь решить вопрос с Lets encrypt сертификатом. На хостинге hosting.energy при создании сайта dommeb.com.ua подключил бесплатный Lets encrypt из Isp панели. Все было хорошо несколько дней, проходил тесты SSL ssllabs.com/ssltest/analyze.html на А+. Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton - появлялось только предупреждения о ненадежности сертификата , а дальше можно нажать Продолжить и сайт был доступен.

Неделю назад заметил, что при загрузке с мобильного и тестов на редиректы (поставил в настройках домена на хостинге редиректы с http-https) происходит добавление в url :443 (название SSL порта). И сайт не доступен при загрузке (надпись ошибки).

Написал в хостинг, решили в течении нескольких дней вопрос. Написали "Исправили конфигурации Nginx относительно редиректов, в конфиги закралась ошибка (вероятно, из-за панели управления) и было 2 редиректа."

:443 уже не дописывался с мобильного и при тесте на редиректы. Но сайт по прежнему не грузился, как с появлением этих двойных редиректов :443 (ошибка на Android 2.3.6 сайт не доступен при загрузке).

Посмотрел ssl тест, тоже А+ результат, но появилась ошибка в подпункте Handshake Simulation No SNI 2Android 2.3.7 No SNI 2 Server sent fatal alert: handshake_failure

Погуглил по этой ошибке: Здесь про эту ошибку и решение пишут talk.plesk.com/threads/https-websites-not-loading-in-ie.338346/ Передал всю информацию в тех поддержку хостинга.

Несколько дней переписывался с хостингом, говорят ничего в конфигурации настроек хостинга не меняли, используют стандартный плагин Lets Encrypt сертификата. И они не гарантируют работу SSL от LetsEncryt на устаревших платформах. Предложили выделенный IP за 1.5$ в месяц. Хотя несколько дней назад все работало и правок не было на обеих сайтах (все данные в браузерах очищал). А сам сайт хостинга (тоже на этом сертификате, нормально и сейчас грузится с с мобильного и даже без предупреждения)

Сайты на виртуальном хостинге, без выделенного IP. Один сайт сделал на Opencart с Lets encrypt сертификатом, все было в порядке. Второй тестовый на WordPress - все было тоже хорошо с android 2.3.6. Собирался переходить на третьем сайте (WordPress) с http на https, и уже первые два нормально не грузятся на Android 2.3.6... Хотелось бы чтобы все пользователи могли нормально заходить на сайт (в крайнем случае на старых платформах как Android 2.3.6 чтобы было только предупреждение, которое можно пропустить) Подскажите пожалуйста, может вы знаете в чем может быть причина?

Решил посмотреть платные сертификаты, вроде хороший этот от Comodo namecheap.com/security/ssl-certificates/comodo/positivessl.aspx , может знаете, как он работает на платформе Android? Является ли сертификат Comodo достоверным. Немного запутался с этим


avatar

Админ

Роман Жариков сказал 21-05-2017 в 13:01

   В ответ на комментарии автора Илья

Пробовал загрузить с мобильного на Android 2.3.6 с стандартного браузера и Maxton - появлялось только предупреждения о ненадежности сертификата , а дальше можно нажать Продолжить и сайт был доступен.

Добрый день, Илья! Скорее всего решение проблемы может быть в том, чтобы прописать в конфиге nginx для того домена, который проверяете, правильную директиву ssl_ciphers:

ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';

Попробуйте вставить это, должно работать и для старого Android


avatar

Илья сказал 21-05-2017 в 20:28

   В ответ на комментарии автора Роман Жариков

На виртуальном хостинге такое можно добавить для сайта? Или нужно просить чтобы в целом на хостинге прописали?


avatar

Админ

Роман Жариков сказал 21-05-2017 в 21:47

   В ответ на комментарии автора Илья

Если у вас есть root доступ к хостингу, то вы сами можете. Но если у вас шаред хостинг, то придется просить )


avatar

Илья сказал 21-05-2017 в 22:32

   В ответ на комментарии автора Роман Жариков

Да, виртуальный хостинг. Спасибо вам! Попробую попросить


avatar

Админ

Роман Жариков сказал 20-07-2017 в 12:27

   В ответ на комментарии автора Илья

Попробую попросить

Если вам не помог предыдущий шаг, то можете зайти на этот сервис, чтобы попытаться самостоятельно сформировать нужный конфиг для nginx, например