Как продлить сертификат letsencrypt windows

Получаем и обновляем SSL сертификат Let’s Encrypt

Obtaining and renewing Let’s Encrypt SSL certificate

Не так давно в промышленную эксплуатацию был запущен центр сертификации Let’s Encrypt.

От всех прочих провайдеров SSL сертификатов его отличает две главные особенности.

Во-первых, Let’s Encrypt позволяет получить (и в ряде случаев даже установить) полученный сертификат в вашу систему в автоматическом режиме, а, во-вторых, сделать это совершенно бесплатно.

Сочетание этих двух факторов даёт возможность легко получить, быстро установить и забыть об обновлении полученного (одного или нескольких) SSL сертификатов в будущем.

Итак, небольшой how-to который был подготовлен на базе настройки этого самого блога.

Имеем сервер на FreeBSD где, помимо прочего, работает веб-сервер Lighttpd.

1. Устанавливаем официальный клиент Let’s Encrypt

Удобнее всего это сделать из дерева портов системы.

Сам сайт и система управления им расположены по стандартными системным путям.

Добавим в конфигурацию Lighttpd секцию для обслуживания сайта.

2. Получаем SSL сертификат

Ввиду того, что мы уже имеем развёрнутый и работающий веб-сервер, воспользуемся для получения сертификата методом webroot (подробнее о доступных методах см. certbot -h).

Немного об опциях:

  • certonly — получаем сертификат, но не устанавливаем его автоматически;
  • —agree-tos — соглашаемся с условиями сервиса;
  • —email — предоставляем контактный e-mail, это обязательный параметр;
  • —webroot — подтверждаем право владения доменом через запрос кода по HTTP;
  • -w — путь к контенту сайта для временного размещения кода;
  • -d — домены, которые будет подтверждать данный сертификат. В данном случае, мы выписываем в один сертификат сразу два доменных имени. Let’s Encrypt позволяет включить в него до 100 доменов одновременно. К сожалению, и это первый относительный минус данного центра сертификации, он не поддерживает т.н. wildcard, которые позволяют покрыть все домены более низкого уровня по отношению к базовому.

Как видно, клиент сообщил об успешном получении нами SSL сертификата для запрошенных доменов и сообщил путь к месту его размещения.

Обратите внимание, что предложенный путь ведёт на ссылки на сертификаты (симлинки), а не сами файлы, которые хранятся в другом месте.

Здесь мы видим автоматически сгенерированный набор сертфикатов и их индекс — версию (в данном случае 1):

  • cert1.pem — сам публичный сертификат для наших доменов;
  • chain1.pem — корневые сертификаты центра сертификации Let’s Encrypt;
  • fullchain1.pem — полная цепочка сертификатов, включающая cert1.pem и chain1.pem;
  • privkey1.pem — закрытый ключ сертификата.

В связи с тем, что Lighttpd требует предоставления файла сертификата, который включает в себя публичную и закрытую его части создадим его вручную под именем privandcert.pem.

Создадим также и ссылку на него в принятом для данной системы месте.

3. Подключаем полученные сертификаты к сайту

Обратите внимание, что поскольку на сервере размещён не один только сайт, то используется несколько наборов сертификатов. В качестве базового при начальном соединении используется SSL сертификат для домена my.server, а после посредством механизма TLS SNI предоставляется уже необходимый. Если вы размещаете только один сайт или используете единый для всех сертификат, вы можете обойтись без секции $HTTP[«host»] прописав путь к вашему единственному сертификату по аналогии с my.server в вышеприведённом файле конфигурации.

4. Настраиваем механизм автоматического обновления сертификатов

Все сертификаты, выдаваемые Let’s Encrypt имеют срок действия в 90 дней и это его второй относительный минус. Столь короткий срок, равно как и отсутствие возможности использования wildcard, обусловлены заботой о повышении уровня безопасности сертифицируемых доменов. Обновление всей базы полученых SSL сертификатов производится простой командой.

Как видно, обновления не произошло, поскольку используются «свежие» сертификаты. Однако, если бы до срока их окончания оставалось 30 дней и меньше они были бы обновлены в автоматическом режиме. При этом индексный номер самих файлов сертификатов получил бы следующее по порядку значение.

Зная это, напишем простой shell-скрипт для автоматического обновления базы сертификатов по cron.

В данном случае при его выполнении будет произведена проверка сроков действия имеющихся в хранилище сертификатов и в случае их возраста старше 60 дней будет произведена их автоматическая замена. В последнем случает будет подготовлен и новый совместный файл публичной и закрытой части сертификата для Lighttpd и произведена его переинициализация.

Читайте также:  Как сделать том mac os основным

Добавим задание в cron для еженедельной проверки и обновления выданных Let’s encrypt сертификатов.

5. PROFIT!

Статья была полезной? Тогда прошу не стесняться и поддерживать деньгами через PayPal или Яндекс.Деньги.

Автообновление сертификатов Let’s Encrypt

5-е марта 2017, 15:03

И очередной раз я посыпаю голову пеплом, так как вот уже около года на одном из моих пет-прожектов spaceismine.org протух Let’s Encrypt сертификат, а я даже и не думал шевелиться. Что ж, рано или поздно всё равно нужно исправляться. Приступаю.

Бегло заглянув на сайт этого замечательного проекта с бесплатными сертификатами, я отыскал нужный себе раздел и примерно понял, что нужно делать. Год развития проекта дал о себе знать, теперь существует прокачанная утилита, распространяемая через deb-пакет. Ставим её.

Да, приходится подключать отдельный PPA, так как в Ubuntu 16.04 (которая у меня) этот пакет довольно старый, и в нём нет поддержки ключа —post-hook , который нам понадобится ниже.

Судя по всему, написано там всё на питоне. Итак, поставив certbot, я сделал для проверки успешности своих намерений dry-run запуск (так называемый запуск вхолостую, который по факту ничего не делает, а только показывает отчёт), как это предлагалось в документации certbot.

Success-success, успех-успех! Ну, дальше можно было уже запустить и полноценное обновление сертификата.

Замечательно, он говорит, что всё нам обновил. Делаем релоад нашему nginx .

И вот всё, сертификат обновлён, всё замечательно. Но, не буду же я раз в 3 месяца заходить обновлять его руками, поэтому я поискал информацию, как лучше всего это прикрутить на cron . Оказывается, ничего особо сложного с этим тоже не было.

и добавляем там

“Зачем делать два раза в день?” спросите вы. Да, это довольно часто, но я столкнулся с мнениями, что в этом нет ничего такого, так как certbot ничего не делает, если сертификат по факту пока обновлять не требуется. Момент необходимости обновления сертификата наступает за 30 дней до его истечения.

Убеждаемся напоследок, что команда cron работает. Многие годы работы с cron научили меня это делать в обязательном порядке.

Итак, похоже всё хорошо и всё работает. На этом завершаю свою заметку про автоматическое обновление сертификатов Let’s Ecnrypt.

Получение бесплатного SSL сертификата Let’s Encrypt

Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.

Условия получения бесплатного сертификата от Let’s Encrypt

Прежде чем начать, необходимо знать о некоторых нюансах получения сертификата Let’s Encrypt:

  • При запросе выполняется проверка домена. Для этого необходимо:
    1. либо создать TXT-запись в DNS.
    2. либо поднять веб-сервер, далее в его корне создается каталог .well-known, а в нем файл с произвольным названием. После корневой центр отправляет запрос серверу на загрузку данного файла и, в случае успеха, выдает сертификаты для указанного доменного имени.
  • SSL-сертификат выдается на 90 дней, поэтому необходимо по расписанию запускать команду на автоматическое продление ключа. Когда проходит 60 дней после начала использования нового сертификата, центр Let’s Encrypt может выдать новый.
  • Если выполнять запрос для домена 3 уровня и выше, он должен пройти DNS проверку на всех уровнях. Например, домен layer3.layer2.com должен отвечать на запросы как для layer3.layer2.com, так и для layer2.com.

Проверка домена

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

Настройка веб-сервера

Данный способ немного сложнее для Linux (для Windows все настройки делает утилита автоматически), но позволяет без проблем настроить автоматическое продление.

Запрашивать сертификат Let’s Encrypt проще всего с веб-сервера, на котором запущен сайт для домена. Возможен альтернативный вариант с монтирование сетевой папки, но его рассматривать не будем.

Linux NGINX

Пример простого конфигурационного файла для NGINX:

server <
listen 80;
server_name dmosk.ru;
root /usr/share/nginx/html;
>

* где dmosk.ru — домен, для которого работает сайт и для которого мы будем запрашивать сертификат; /usr/share/nginx/html — путь по умолчанию для nginx.

Если сервер уже используется для сайта, в секцию server добавляем:

/.well-known <
root /usr/share/nginx/html;
allow all;
>

* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/html; allow all предоставляет доступ всем.

При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:

/.well-known <
root /usr/share/nginx/html;
allow all;
>
if ($uri !

После проверяем конфигурацию и перезапускаем nginx:

Читайте также:  Как узнать историю создания файла linux

service nginx reload

Linux Apache

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

б) для Ubuntu / Debian:

Со следующим содержимым:

Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/

* в данном примере, запросы для страниц /.well-known/acme-challenge всех сайтов мы переводим в каталог /var/www/html/.well-known/acme-challenge.

Проверяем корректность конфигурационного файла:

И перезапускаем apache:

systemctl restart httpd || systemctl restart apache2

Windows

IIS должен отвечать на http-запрос до доменному имени, для которого мы планируем получить сертификат. Также в его настройках мы должны сделать привязку узла, для которого хотим получить сертификат к конкретному сайту. Для этого в консоли управления IIS раскрываем сайты и выбираем нужный нам (в данном примере, он всего один):

В меню справа кликаем по Привязки:

Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:

Применяем настройки и закрываем консоль управления IIS.

С помощью записи в DNS

Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.

У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.

Установка утилиты для получения сертификата

Certbot для Linux

а) на CentOS 8:

dnf —enablerepo=PowerTools install certbot

б) на CentOS 7:

yum install certbot

в) на Ubuntu 16.04 и выше, а также Debian:

apt-get install certbot

г) на CentOS 6 или Ubuntu 14.04 / 12.04:

Создадим каталог, в котором будет храниться утилита и переходим в него:

Загружаем утилиту и разрешаем ее запуск:

chmod a+x ./certbot-auto

Для удобства, делаем симлинк:

ln -s /opt/certbot/certbot-auto /usr/local/sbin/certbot

При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.

LetsEncrypt-Win-Simple для Windows

На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:

Раcпаковываем скачанный архив в любую папку.

Первое получение сертификата

Linux

1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:

certbot certonly —webroot —agree-tos —email —webroot-path -d -d -d .

  • certonly — запрос нового сертификата;
  • webroot — проверка будет выполняться на основе запроса к корню сайта;
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • webroot-path — каталог в системе Linux, который является корневым для сайта;
  • d — перечисление доменов, для которых запрашиваем сертификат.

а) Пример запроса при использовании веб-сервера NGINX:

certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /usr/share/nginx/html/ -d dmosk.ru -d www.dmosk.ru

б) Пример запроса при использовании веб-сервера Apache:

certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /var/www/html/ -d dmosk.ru -d www.dmosk.ru

После успешного выполнения команды, сертификаты будут созданы в каталоге /etc/letsencrypt/archive/dmosk.ru, а также симлинки на них в каталоге /etc/letsencrypt/live/dmosk.ru. При настройке приложений, стоит указывать пути до симлинков, так как при обновлении файлы в первом каталоге будут меняться, во втором — нет. Публичный ключ будет с именем cert.pem, а приватный — privkey.pem.

2. При подтверждении права на домен с TXT-записью:

certbot certonly —manual —agree-tos —email postmaster@dmosk.ru —preferred-challenges=dns -d dmosk.ru -d www.dmosk.ru

  • certonly — запрос нового сертификата;
  • manual — проверка домена вручную.
  • preferred-challenges — указывает метод проверки домена.
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • d — перечисление доменов, для которых запрашиваем сертификат.

На запрос подтверждения отвечаем Y — система выдаст что-то на подобие:

Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:

Once this is deployed,

* Данное сообщение говорит, что мы должны создать TXT-запись _acme-challenge.dmosk.ru со значением W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm.

Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.

Windows

Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:

* где 2.1.6.773.x64 — моя версия утилиты.

Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:

Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):

Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:

Вводим email адрес и подтверждаем корректность данных:

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

Читайте также:  Как очистить компьютер от ненужных процессов windows 10

Автоматическое продление

Linux

Смотрим полный путь до скрипта certbot:

Открываем на редактирование cron и добавляем следующее:

а) для Ubuntu / Debian:

0 0 * * 1,4 /usr/bin/certbot renew

0 0 * * 1,4 /bin/certbot renew

* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.

Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/ и обновляет симлинк.

Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:

0 0 * * 1,4 /bin/certbot renew && systemctl reload nginx

Windows

Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:

Wildcard

С марта 2018 года появилась возможность получить бесплатный сертификат на все поддомены, например, mail.dmosk.ru, test.dmosk.ru, admin.dmosk.ru (*.dmosk.ru).

Особенности получения Wildcard от Let’s Encrypt:

  1. Подтвердить право использования доменом можно только с помощью DNS — таким образом, затрудняется процесс автоматического продления. Нужно использовать плагины, которые позволяют автоматически создавать нужную запись на DNS, но они доступны далеко не для всех поставщиков услуг DNS. В противном случае, обновлять Wildcard нужно вручную.
    Также, некоторые панели управления хостингом, например ISP Manager с версии 5 могут управлять процессом получения Wildcard от Let’s Encrypt с возможностью автоматического продления (но необходимо, чтобы домен обслуживался на данном хостинге).
  2. Время действия сертификата также ограничено 3 месяцами.

Certbot

Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:

. если версия ниже, обновляем ее командами:

а) для CentOS / Red Hat:

yum update certbot

б) для Ubuntu / Debian:

apt-get install —only-upgrade certbot

Процесс получения

Процесс очень похож на процесс получения сертификата с подтверждением домена в DNS.

certbot certonly —manual —agree-tos —email master@dmosk.ru —server https://acme-v02.api.letsencrypt.org/directory —preferred-challenges=dns -d dmosk.ru -d *.dmosk.ru

* обратим внимание на 2 детали: 1) мы добавили опцию server, чтобы указать, на каком сервере Let’s Encrypt должна проходить проверка DNS; 2) мы получаем сертификат как для *.dmosk.ru, так и самого dmosk.ru, так как первое не включает второго.

. система попросит создать TXT-запись в DNS, который обслуживает наш домен:

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:

* в данном примере система попросила создать TXT-запись _acme-challenge.dmosk.ru со значением DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI.

Заходим в панель управления DNS и создаем нужную запись. Если у нас свой сервер DNS, например, bind, то строка будет такой:

; TXT
_acme-challenge IN TXT DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI

Не торопимся нажимать Enter — после настройки DNS нужно немного времени (пару минут), чтобы настройка применилась. Проверить появление записи можно командой с рабочего компьютера:

nslookup -type=txt _acme-challenge.dmosk.ru 8.8.8.8

Как только видим, что настройки применились, нажимаем Enter — если это наш первый запрос Wildcard для данного домена, то система нас попросит создать еще одну запись — повторяем процедуру, создав в DNS вторую запись TXT.

Если все сделали правильно, то увидим:

IMPORTANT NOTES:
— Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/dmosk.ru/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/dmosk.ru/privkey.pem
Your cert will expire on 2019-09-05. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
«certbot renew»
— If you like Certbot, please consider supporting our work by:

Donating to ISRG / Let’s Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le

Возможные ошибки

Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.

Missing command line flag or config entry for this setting

Ошибка появляется при попытке обновить сертификат для одного или нескольких доменов.

Причина: при обновлении сертификата, утилита certbot ищет настройки в конфигурационном файле /etc/letsencrypt/renewal/ .conf. Если в данном файле не будет определена конфигурация для webroot_map, мы получим данную ошибку.

Решение:

Открываем конфигурационный файл для домена, например:

Находим опцию webroot_map (как правило, в самом низу). Либо она будет пустой, либо указывать на неправильный путь. Исправляем это:

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

Оцените статью