Простой переход сайта на https. Letscrypt

letsencrypt

Случилось так, что с 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 — настройка автоматического обновления сертификата

Сертификаты от Let’s Encrypt действуют 90 дней. Рекомендуется обновлять их не реже, чем каждые 60 дней, чтобы не было проблем. Скрипт, который мы скачали, может обновлять сертификаты автоматически. Скрипт проверяет текущий сертификат и если осталось менее 30 дней до того, как он протухнет, SSL будет обновлен.
Для запуска процедуры обновления необходимо выполнить:
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