В 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, и поступил именно так.
Проблема с обновлением сертификата.
Как вам, возможно, известно, сертификаты 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 для обновления сертификата. Затем я повторно выполнил команду обновления. Первой возникшей ошибкой была:
файл конфигурации продления поврежден
Это случилось по двум причинам:
- На сервере отсутствуют файлы cert. pem и chain. pem.
- Я применяю настоящие файлы вместо символьных ссылок.
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.
Теперь в папке /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
После этого вновь создайте символические ссылки. Теперь я могу без затруднений обновить свой сертификат.
После этого вновь создайте символические ссылки. Теперь я могу без затруднений обновить свой сертификат.

