При продлении бесплатного TLS/SSL сертификата от Let’s Encrypt возможны некоторые трудности, которые стоит избегать

В 2015 году, когда я начал этот веб-сайт, я выбрал недорогой VPS за 10 долларов в год. Я воспользовался бесплатным сертификатом TLS/SSL от Let’s Encrypt и настроил Nginx для обработки HTTPS-трафика.

В марте 2016 года я переместил свой веб-сайт на облачный SSD сервер от Digital Ocean, стоимость которого составляет 5 долларов в месяц (доступен 10 долларов бесплатного кредита). Для поддержки HTTPS-трафика мне также потребовалось перенести свой сертификат TLS/SSL на новый сервер.

Nginx нуждается в двух файлах для обработки HTTPS-трафика: полном цепочном сертификате и вашем приватном ключе. Для Let’s Encrypt эти файлы расположены по следующему адресу:

/etc/letsencrypt/live/your-site.com/fullchain. pem находится в директории /etc/letsencrypt/live/.your-site.com/privkey. pem

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

/etc/letsencrypt/archive/yoursite.com/fullchain1.pem находится в директории /etc/letsencrypt/archive/.yoursite.com/privkey1.pem

Я решил, что просто скопирую упомянутые два файла на свой SSD-сервер Digital Ocean, и поступил именно так.

Читайте также:  Объяснение вывода команды Top: Введение для начинающих

Проблема с обновлением сертификата.

Как вам, возможно, известно, сертификаты Let’s Encrypt имеют срок действия 90 дней. Каждые три месяца требуется их обновлять.

Возникли проблемы с продлением сертификатов, так как на сервере остались только файлы fullchain1.pem и privkey1.pem. Все остальные файлы, относящиеся к Let’s Encrypt, были утрачены. Эти два файла позволяют Nginx обрабатывать HTTPS-трафик, но их недостаточно для выполнения продления сертификатов.

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

sudo letsencrypt renew

Клиент Let’s Encrypt не стал обновлять мой сертификат, так как для этого ему требуется файл конфигурации продления. Этот файл содержит информацию о том, какой плагин и какие параметры нужно использовать для обновления сертификатов.

Я нашёл пример файла для настройки продления и создал его, воспользовавшись следующей командой.

sudo nano /etc/letsencrypt/renewal/linux16.ru.conf

И внёс в файл такие строки.

cert = /etc/letsencrypt/live/linux16.ru/cert. pem privkey = /etc/letsencrypt/live/linux16.ru/privkey. pem chain = /etc/letsencrypt/live/linux16.ru/chain. pem fullchain = /etc/letsencrypt/live/linux16.ru/fullchain. pem # Параметры, используемые в процессе продления [renewalparams] authenticator = webroot installer = None account = 7b3fa88c32887c234036234f6cc6358ab webroot_path = /usr/share/nginx/linux16.ru, [[webroot_map]] linux16.ru = /usr/share/nginx/linux16.ru

Данная настройка указывает клиенту Let’s Encrypt применять плагин Webroot для обновления сертификата. Затем я повторно выполнил команду обновления. Первой возникшей ошибкой была:

Читайте также:  Браузер Midori в Linux Ubuntu

файл конфигурации продления поврежден

Это случилось по двум причинам:

  1. На сервере отсутствуют файлы cert. pem и chain. pem.
  2. Я применяю настоящие файлы вместо символьных ссылок.

cert. pem представляет собой сертификат, выданный Let’s Encrypt, тогда как chain. pem — это промежуточный сертификат, предоставленный корневым центром сертификации Let’s Encrypt. Оба этих файла необходимы для формирования файла fullchain. pem. В файле fullchain. pem вы можете увидеть, что cert. pem располагается выше chain. pem.

Для получения файлов cert. pem и chain. pem вам нужно скопировать верхнюю часть файла fullchain. pem и сохранить её как cert. pem. Затем возьмите нижнюю часть этого же файла и сохраните её под именем chain. pem.

Читайте также:  Инструкция по установке программы ScreenStudio Screencaster на Ubuntu 16.04 и Linux Mint 18

Теперь в папке /etc/letsencrypt/archive/linux16.ru находятся файлы cert. pem, chain. pem, fullchain. pem и privkey. pem.

После этого необходимо создать символические ссылки.

sudo ln - sf /etc/letsencrypt/archive/linux16.ru/cert. pem /etc/letsencrypt/live/linux16.ru/cert. pem sudo ln - sf /etc/letsencrypt/archive/linux16.ru/chain. pem /etc/letsencrypt/live/linux16.ru/chain. pem sudo ln - sf /etc/letsencrypt/archive/linux16.ru/fullchain. pem /etc/letsencrypt/live/linux16.ru/fullchain. pem sudo ln - sf /etc/letsencrypt/archive/linux16.ru/privkey. pem /etc/letsencrypt/live/linux16.ru/privkey. pem

Повторно выполните команду для обновления сертификата.

sudo letsencrypt renew

На этот раз мне выдали такую ошибку:

max() arg is an empty sequence

Это сообщение указывает на распространённую ошибку в Python, однако не раскрывает сути произошедшего. Для устранения данной проблемы мне необходимо просто изменить имена четырёх файлов pem в папке /etc/letsencrypt/archive/linux16.ru/.

cd /etc/letsencrypt/archive/linux16.ru mv cert. pem cert1.pem mv chain. pem chain1.pem mv fullchain. pem fullchain1.pem mv privkey. pem privekey1.pem

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

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