Случилось так, что с 2016 года большинство браузеров перестали доверять сертификационным центрам WoSign и StartCom. И в какой-то момент ко мне начали обращаться за помощью, чтобы я восстановил работу веб-сайтов. Все они были подняты с SSL от этих центров и перестали открываться в браузерах Chrome, Mozilla и Safari. Поискав в Интернете, я нашел замечательный ресурс под названием Letscrypt.
Ниже описание того, что нужно сделать, чтобы через несколько минут сайт снова заработал.
На примере ОС Ubuntu 16.04 LTS (GNU/Linux 4.4.0-62-generic x86_64) и Apache. Но принцип везде один и тот же.
Подключаемся к серверу по ssh, используя sudo делаем следующее.
Шаг 0 — выключаем https
При установке нового SSL средствами Let’s Encrypt я столкнулся с проблемой, что сервер удостоверяющего центра не мог получить доступ к сайту по протоколу http. А ему это необходимо для того, чтобы проверить владельца домена. Поэтому перед установкой, необходимо перевести сайт с https на http, либо включить, чтобы он работал по обоим протоколам. Для этого правим конфиги apache, перезапускаем службу и проверяем, чтобы сайт открывался по http. Если используется редирект — отключаем.
Еще один момент, который сразу можно проверить — это создать в корне каталоги в таком виде:
/.well-known/acme-challenge/
и туда положить файлик, в него записать любой текст и попробовать открыть в браузере. Если текст покажется на странице, то все ок! Если нет — смотреть настройки веб-сервера.
Шаг 1 — скачиваем Let’s Encrypt клиент
Клиент называется certbot-auto. По необходимости он автоматически подтянет все зависимости и обновы после установки. Скачиваем его в директорию /usr/local/sbin.
cd /usr/local/sbin sudo wget https://dl.eff.org/certbot-auto
Сделаем скрипт исполняемым.
sudo chmod a+x /usr/local/sbin/certbot-auto
Клиент certbot-auto теперь готов к запуску.
Шаг 2 — устанавливаем SSL сертификат
После запуска все происходит в фонов режиме. Клиент сам регистрирует сервер на ресурсе, создает необходимые ключи и скачивает подтвержденные сертификаты для тех доменов, которые указаны в качестве аргументов при запуске скрипта.
Для запуска интерактивной установки и получения сертификата, который будет поддерживает только 1 домен, необходимо запустить команду:
certbot-auto --apache -d domain.com
Если нужен серт для нескольких доменов, то можно скрипту указать это. Причем тот домен, который будет указан в качестве аргумента первым — будет основным доменом, используемым Let’s Encrypt для создания сертификата. Вот так:
certbot-auto --apache -d domain.com -d www.domain.com
В этом примере основным доменом будет domain.com.
После установки всех зависимостей, скрипт начнет пошаговую установку для настройки опций сертификата. Необходимо ответить на некоторые вопросы, например, указать email, который будет использоваться в качестве владельца и для восстановления данных. А также будет предложен выбор протоколов по которым должен открываться сайт.
Особенность данного скрипта в том, что он самостоятельно правит конфиги веб-сервера и перенастраивает работу с новыми сертификатами. Можно будет потом только проверить как все прописалось, и при необходимости поправить на свое усмотрение.
После завершения установки, вы можете найти сертификаты в /etc/letsencrypt/live.
Также можно проверить статус SSL сертификата по данной ссылке:
https://www.ssllabs.com/ssltest/analyze.html?d=domain.com&latest
Теперь сайт снова открывается по https.
Шаг 3 — настройка автоматического обновления сертификата
certbot-auto renew
Так как мы только что создали сертификат, произойдет проверка срока сертификата и мы получим сообщение, что сертификат никогда не обновлялся. Что-то вроде этого:
Checking for new version...
Requesting root privileges to run letsencrypt...
/home/sk/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/domain.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/domain.com/fullchain.pem (skipped)
No renewals were attempted.
Если был создан один сертификат на несколько доменов, то в сообщении будет выдаваться информацию только по одному основному домену. Это нормально.
Лучше всего создать задание в cron для периодического запуска скрипта, например, каждую неделю.
Как правильно добавлять в cron описано в другой моей статье.
Пример:
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log