Устанавливаем SSL соединение с помощью Let’sEncrypt
Неожиданно был удивлен, когда после обновления гугл хром зашел в блог и увидел надпись «Возможно злоумышленники с данного домена пытаются похитить ваши пароли» :-) А потом вспомнил, что когда то прикручивал бесплатный SSL от стартком, который уже сейчас считается ненадежным в новейших версиях браузеров. Вот тут описывал как я подключал ssl+http2 и мимолетно указал на ссылку, где дают инфу по поводу StartCom и WoSign.
Что ж, не проблема. После этого принял решение переходить на Let’sEncrypt. Заходим по ssh в свой /root/ на сервере:
mkdir -p 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:
ssl_certificate /etc/letsencrypt/live/ваш домен/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ваш домен/privkey.pem;
Делаем
service nginx restart
Заходим на сайт и радуемся:
Но может возникнуть ситуация, судя по многочисленным топикам в соответствующих форумах, что, ну никак не получается использовать 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 (про прирост производительности можно не говорить, это факт)
Настройка сервера
Услуги » Настройка веб-сервера
Регистрация, настройка с моей стороны VDS сервера в соответствии с выбраным вами тарифом
Веб-разработка
Займусь вашим проектом, если вам нужен специалист в области веб-разработки
Перед тем как писать комментарии, рекомендую ознакомиться:
6
Илья сказал 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 достоверным. Немного запутался с этим
Рейтинг комментария (-1)
Админ
Роман Жариков сказал 21-05-2017 в 13:01
В ответ на комментарии автора ИльяДобрый день, Илья! Скорее всего решение проблемы может быть в том, чтобы прописать в конфиге nginx для того домена, который проверяете, правильную директиву ssl_ciphers:
Попробуйте вставить это, должно работать и для старого Android
Рейтинг комментария (0)
Илья сказал 21-05-2017 в 20:28
В ответ на комментарии автора Роман ЖариковНа виртуальном хостинге такое можно добавить для сайта? Или нужно просить чтобы в целом на хостинге прописали?
Рейтинг комментария (-1)
Админ
Роман Жариков сказал 21-05-2017 в 21:47
В ответ на комментарии автора ИльяЕсли у вас есть root доступ к хостингу, то вы сами можете. Но если у вас шаред хостинг, то придется просить )
Рейтинг комментария (-1)
Илья сказал 21-05-2017 в 22:32
В ответ на комментарии автора Роман ЖариковДа, виртуальный хостинг. Спасибо вам! Попробую попросить
Рейтинг комментария (0)
Админ
Роман Жариков сказал 20-07-2017 в 12:27
В ответ на комментарии автора ИльяЕсли вам не помог предыдущий шаг, то можете зайти на этот сервис, чтобы попытаться самостоятельно сформировать нужный конфиг для nginx, например
Рейтинг комментария (0)