To use Certbot, you’ll need…
comfort with the
…and an
that is
with an open
…which is hosted on a
which you can access via
with the ability to
optional if you want a
:
-
Important notes
This procedure follows the current Certbot implementation for Windows, in particular the fact that it installs as a system component, and requires administrative privileges. These instructions will be updated when a future version of Certbot switches to a different installation method.
No installers for HTTP servers are supported for now (Certbot for Windows can currently obtain your certificate from Let’s Encrypt, but not install it into your web server application). -
Specific Windows system requirements and user knowledge requirements
- The user needs to be familiar with the command-line interface (CLI), because Certbot is a pure CLI program.
- The user must use an account with administrative privileges to install and run Certbot.
- PowerShell and
CMD.EXE
are supported; both need to be started with elevated privileges before invoking Certbot. - Path
C:\Certbot
must be writable by the current user.
-
Installation instructions
- Connect to the server.
- Connect locally or remotely (using Remote Desktop) to the server using an account that has administrative privileges for this machine.
- Install Certbot.
- Download the latest version of the Certbot installer for Windows at https://github.com/certbot/certbot/releases/latest/download/certbot-beta-installer-win_amd64_signed.exe.
- Run the installer and follow the wizard. The installer will propose a default installation directory,
C:\Program Files(x86)
, that can be customized.) - To start a shell for Certbot, select the Start menu, enter
cmd
(to runCMD.EXE
) orpowershell
(to run PowerShell), and click on “Run as administrator” in the contextual menu that shows up above. - Run Certbot as a shell command.
To run a command on Certbot, enter the name
certbot
in the shell, followed by the command and its parameters. For instance, to display the inline help, run:C:\WINDOWS\system32> certbot --help
-
Choose how you’d like to run Certbot
Are you ok with temporarily stopping your website?
Yes, my web server is not currently running on this machine.
Stop your webserver, then run this command to get a certificate. Certbot will temporarily spin up a webserver on your machine.
C:\WINDOWS\system32> certbot certonly --standalone
No, I need to keep my web server running.
If you have a webserver that’s already using port 80 and don’t want to stop it while Certbot runs, run this command and follow the instructions in the terminal.
C:\WINDOWS\system32> certbot certonly --webroot
-
Test automatic renewal
The Certbot installation on your system comes with a pre-installed Scheduled Task that will renew your certificates automatically before they expire. You will not need to run Certbot again, unless you change your configuration. You can test automatic renewal for your certificates by running the command
C:\WINDOWS\system32> certbot renew --dry-run
If you needed to stop your webserver to run Certbot (for example, if you used the standalone authenticator on a machine where port 80 is normally in use), you’ll want to edit the built-in command to add the
--pre-hook
and--post-hook
flags to stop and start your webserver automatically. For example, if your webserver is Apache 2.4, add the following to the certbot renew command:--pre-hook “net.exe stop Apache2.4” --post-hook “net.exe start Apache2.4”
-
Confirm that Certbot worked
To confirm that your site is set up properly, visit
https://yourwebsite.com/
in your browser and look for the lock icon in the URL bar. -
Note for Windows Apache or Nginx users
As described in section 5 above, Certbot for Windows currently cannot install the certificate in Apache or Nginx for you. As of the most recent release, you will have to edit your web server application’s configuration to install the certificate yourself after Certbot has obtained it. If this limitation is acceptable to you, please start from the beginning of this document to learn more about installing and using Certbot on Windows.
Windows installation procedure
Certbot has discontinued support for Windows as of February 2024. You can find alternatives listed on our community announcement here
-
Important notes
This procedure follows the current Certbot implementation for Windows, in particular the fact that it installs as a system component, and requires administrative privileges. These instructions will be updated when a future version of Certbot switches to a different installation method.
No installers for HTTP servers are supported for now (Certbot for Windows can currently obtain your certificate from Let’s Encrypt, but not install it into your web server application). -
Specific Windows system requirements and user knowledge requirements
- The user needs to be familiar with the command-line interface (CLI), because Certbot is a pure CLI program.
- The user must use an account with administrative privileges to install and run Certbot.
- PowerShell and
CMD.EXE
are supported; both need to be started with elevated privileges before invoking Certbot. - Path
C:\Certbot
must be writable by the current user.
-
Installation instructions
- Connect to the server.
- Connect locally or remotely (using Remote Desktop) to the server using an account that has administrative privileges for this machine.
- Install Certbot.
- Download the latest version of the Certbot installer for Windows at https://github.com/certbot/certbot/releases/latest/download/certbot-beta-installer-win_amd64_signed.exe.
- Run the installer and follow the wizard. The installer will propose a default installation directory,
C:\Program Files(x86)
, that can be customized.) - To start a shell for Certbot, select the Start menu, enter
cmd
(to runCMD.EXE
) orpowershell
(to run PowerShell), and click on “Run as administrator” in the contextual menu that shows up above. - Run Certbot as a shell command.
To run a command on Certbot, enter the name
certbot
in the shell, followed by the command and its parameters. For instance, to display the inline help, run:C:\WINDOWS\system32> certbot --help
-
Test automatic renewal
The Certbot installation on your system comes with a pre-installed Scheduled Task that will renew your certificates automatically before they expire. You will not need to run Certbot again, unless you change your configuration. You can test automatic renewal for your certificates by running the command
C:\WINDOWS\system32> certbot renew --dry-run
If you needed to stop your webserver to run Certbot (for example, if you used the standalone authenticator on a machine where port 80 is normally in use), you’ll want to edit the built-in command to add the
--pre-hook
and--post-hook
flags to stop and start your webserver automatically. For example, if your webserver is Apache 2.4, add the following to the certbot renew command:--pre-hook “net.exe stop Apache2.4” --post-hook “net.exe start Apache2.4”
-
Confirm that Certbot worked
To confirm that your site is set up properly, visit
https://yourwebsite.com/
in your browser and look for the lock icon in the URL bar. -
Note for Windows Apache or Nginx users
As described in section 5 above, Certbot for Windows currently cannot install the certificate in Apache or Nginx for you. As of the most recent release, you will have to edit your web server application’s configuration to install the certificate yourself after Certbot has obtained it. If this limitation is acceptable to you, please start from the beginning of this document to learn more about installing and using Certbot on Windows.
Windows installation procedure
Certbot has discontinued support for Windows as of February 2024. You can find alternatives listed on our community announcement here
Даём подробную инструкцию, как выпустить SSL-удостоверение на операционной системе Windows со скриншотами и указателями.
-
Certbot — это клиент протокола АСМЕ, благодаря которому можно автоматически управлять SSL-сертификатами от Let’s Encrypt.
С ним процесс получения и продления удостоверения безопасности становится до боли простым. А если использовать нужные плагины, можно автоматически конфигурировать веб-сервер или другое приложение, где работает SSL.
Чтобы не запутаться в процессе выпуска SSL, будем разбираться.
Что нужно сделать:
Шаг 1. Перейти на официальный сайт Certbot.
Шаг 2. Выбрать нужный сертификат. В My HTTP website is running on выбираем Web Hosting Product, так как нужно выпустить удостоверение для web-хостинга:
❗ Certbot — это CLI-программа, поэтому пользователь должен быть знаком с интерфейсом командной строки*.
*Интерфейс командной строки (Command line interface) — это способ взаимодействия между человеком и компьютером посредством команд. Команды представлены последовательностью символов и интерпретируются с помощью специального интерпретатора — оболочки.
-
Чтобы установить и запустить программу, нужно использовать учётную запись с правами администратора операционки компьютера.
Сейчас Certbot может получить ваш SSL от Let’s Encrypt, но не факт, что он установит его в приложение веб-сервера (не поддерживаются установщики для HTTP-серверов). Поэтому получить и сразу загрузить сертификат из командной строки на сервер не получится.
Шаг 3. Загрузить последнюю версию установщика по этой ссылке.
Шаг 4. Дождаться загрузки — она начнётся автоматически.
Шаг 5. Запустить установщик и следовать указаниям на экране (Choose the folder in which to install). Кстати, по умолчанию выбирается каталог С:\Program-Files(x86):
Финал. Как только процесс установки завершится, запустить программу (из меню «ПУСК»).
Чтобы инициировать выпуск, нужно ввести команду certbot certonly –authenticator manual:
Далее — нажимаем кнопку Enter.
Теперь появится запрос домена, для которого выпускается SSL (указываем только наименование домена всех уровней, протокол не нужен).
❗ Рекомендуем перевыпускать SSL-удостоверение за несколько дней до окончания действия текущего выпуска. Дожидаться последнего дня не нужно.
После загрузки нового сертификата в регистратор домена старый необходимо будет удалить.
А сейчас — о ситуациях, когда SSL перевыпускается, а срок действия текущего ещё не закончен
Обычно на экране есть две команды на выбор: одна оставляет текущий сертификат — Keep the existing certificate for now, другая обновляет его — Renew & replace the certificate (may be subject to CA rate limits).
Смотрим, как это выглядит:
Теперь выбираем второй пункт — «Обновление сертификата»
Создаём файл без расширения, открываем его (можно в блокноте) и копируем оттуда текст из строк:
Сохраняем его по адресу, выданному программой (имя задаём такое же, как и в адресе сохранения):
Следующий шаг — кнопка Enter.
Если проверка прошла успешно, переходим на новый этап:
Как только выпускаем SSL, переходим в папку расположения удостоверения и его ключа — в программе указывается путь к их расположению.
Открываем два файла через Sublime Text: сертификат (fullchain.pem) и ключ (privkey.pem).
Копируем текст в самый конец файла (fullchain.pem) и сохраняем его с произвольным названием.
Далее — загружаем сохранённый файл в регистратор домена:
Готово.
Теперь вы знаете, как выпустить Certbot и что делать в ситуации, когда новый перевыпускается, а срок действия старого ещё не окончен.
В данной статье будет описан реальный способ получения сертификата от Let’s Encrypt в ручном режиме для его дальнейшей установки на веб-сервер Windows (IIS/Microsoft Azure) или Linux (полностью ручной режим). Из-за отсутствия официального клиента под Windows для генерации сертификата будет использоваться дистрибутив Linux.
Данная статья обновляется с создана для тех, кто хочет управлять процессом создания сертификата в полностью ручном режиме. В статье пошаговая инструкция процесса, чтобы вы уже смогли оперативно создать и начать пользоваться своим сертификатом.
Как это работает
Полное описание процесса доступно по этой ссылке.
Важно лишь знать, что для подтверждения владения доменом и успешной генерации сертификата нужно будет иметь доступ к записям DNS или к серверу куда ссылается A-запись, что вполне логично.
Смысл программного набора Automated Certificate Management Environment (ACME) (написан на Python) в том, чтобы автоматизировать генерацию и установку сертификата в Linux-окружении.
Существует неофициальный Windows-клиент с открытыми исходными кодами, который может генерировать и устанавливать сертификаты на Windows IIS и Amazon Web Services, но у нас была задача получить ключи и установить их вручную. Предлагаю любому желающему написать статью по работе с ним.
Процесс по шагам (на январь 2024 г.)
На текущий момент можно использовать WSL вместо Linux в составе Windows 10/11.
Для этого достаточно запустить терминал в режиме администратора и написать:
wsl --install
Внимание: эта инструкция учит создавать сертификат в ручном режиме, существуют и более простые способы автоматической генерации и обновления сертификатов.
Включая клиенты для Windows.
1. Устанавливаем Snapd
2. Далее запускаем:
sudo snap install --classic certbot
3. И привязываем команды:
sudo ln -s /snap/bin/certbot /usr/bin/certbot
Проверку домена можно осуществить в нескольких режимах:
4 (1). По текстовой записи у домена в DNS:
sudo certbot certonly --authenticator manual --preferred-challenges dns
4 (2). По текстовому ответу (OK 200, text/plain) по адресу http://(ваш домен):80/.well-known/acme-challenge/{путь}
sudo certbot certonly --authenticator manual
Старый способ (2017 г., новый клиент CertBot)
Небольшое обновление статьи в 2017 году.
Теперь можно установить CertBot и получить сертификат в ручном режиме.
Краткая инструкция:
1. Скачиванием дистрибутив
wget https://dl.eff.org/certbot-auto
2. Установка прав на файл
chmod a+x certbot-auto
3. Запуск для получения сертификата в ручном режиме
./certbot-auto certonly --authenticator manual
4. Следуйте указаниям программы (подробнее смотрите в полной инструкции ниже с шага № 4).
Старая инструкция
Подробная инструкция (старый клиент — всё ещё работает)
Использовалась официальная инструкция.
Пользователи Linux могут использовать текст ниже как пример генерации сертификата в ручном режиме.
1. Запустите ваш любимый дистрибутив Linux (мы использовали Debian 8).
либо 2. Установите Git и выполните команды ниже:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
или 2. Скачайте и распакуйте в папку данный архив и перейдите в эту папку
3. Запустите установку и генерацию с помощью
./letsencrypt-auto --agree-dev-preview --server \https://acme-v01.api.letsencrypt.org/directory -a manual auth
Вам будет предложено ввести электронную почту для восстановления в будущем.
Ключ -a manual позволит сгенерировать ключи в ручном режиме без их автоматической установки на веб-сервер.
4. Далее введите домены для которых вы хотите создать сертификаты
5. Подтвердите сохранение вашего адреса в логах Let’s Encrypt
6. Подтвердите владение доменом
В сентябре 2016 года произошли небольшие изменения в порядке получения сертификата. Спасибо toxi_roman за обновление.
Ещё более старый способ подтверждения с text/plain (не актуально по состоянию на октябрь 2016 г.)
Это один из ответственных моментов в режиме ручной регистрации.
Обратите внимание: нас просят создать ответ на запрос, который возвращает Content-Type text/plain.
Такой ответ не пройдёт и подтверждение выдаст ошибку:
Нужно, чтобы было так:
Если у вас приложение ASP.NET CORE (Minimal API):
app.MapGet(".well-known/acme-challenge/{id}", (HttpRequest request) =>
{
return "ваш ключ";
});
Если у вас сервер на Windows IIS (с поддержкой Razor Views, аналогично и с MVC), то для создания правильного ответа:
а) создать папку .well-known и в ней папку acme-challenge
б) поместить туда файл [запрос].cshtml
в) в содержание этого файла добавить:
@{Response.ContentType = "text/plain";Response.Charset = "";}здесь проверочный код
-> После успешной проверки, будут созданы следующие сертификаты в папке /etc/letsencrypt/live/[имя домена]:
privkey.pem — приватный ключ для сертификата
Используется Apache для SSLCertificateKeyFile и nginx для ssl_certificate_key.
cert.pem (сертификат сервера)
Используется Apache для SSLCertificateFile.
chain.pem (сертификат цепочки)
Он же используется Apache для SSLCertificateChainFile.
fullchain.pem (соединение chain.pem и cert.pem)
Он же используется nginx для ssl_certificate.
-> Теперь пришло время сконвертировать его в родной для Windows .pfx формат.
Перейдите в папку /etc/letsencrypt/live/[имя домена] (откройте терминал в режиме администратора с помощью команды su):
cd /etc/letsencrypt/live/[имя домена]
Запустите OpenSSL с помощью команды:
openssl
и начните конвертацию с помощью команды:
pkcs12 -inkey privkey.pem -in fullchain.pem -export -out mydomain.pfx
Вас попросят ввести пароль и подтвердить его.
-> Выходим из OpenSSL с помощью команды quit
-> Копируем итоговый файл в директорию нашего пользователя
cp --no-preserve=all mydomain.pfx /home/(имя пользователя)/Documents
-> Мы получили сертификат mydomain.pfx, который теперь можем использовать в Windows-окружении.
Для обновления сертификата в ручном режиме:
./letsencrypt-auto certonly --renew-by-default -a manual
Важно знать, что сертификаты Let’s Encrypt валидны 90 дней. Рекомендуется обновлять их каждые 60 дней. На электронную почту, которую вы указали для генерации, будут приходить уведомления об истечении сертификата.
Буду рад услышать ваши замечания или пожелания к статье.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Планируете ли вы использовать сертификаты от Let's Encrypt в своих проектах
8.71% Нет, я использую альтернативный сертификат (StartSSL, CloudFlare Flexible SSL)122
4.71% Нет, у меня уже есть платный сертификат66
Проголосовал 1401 пользователь. Воздержались 290 пользователей.
Получение бесплатного SSL сертификата Let’s Encrypt
Обновлено:
Опубликовано:
Тематические термины: Let’s Encrypt, CentOS, Ubuntu
Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.
Условия получения
Проверка права на домен
Используя веб-сервер
С помощью NS
Установка утилиты для запроса сертификата
Certbot (Linux)
LetsEncrypt-Win-Simple (Windows)
Получение сертификата вручную
На Linux
На Windows
Автоматическое продление
Linux
Windows
Запуск certbot в контейнере docker
Получение Wildcard
Полезные команды
Экспорт сертификатов в Windows с закрытым ключом
Let’s Encrypt для Exchange
Возможные ошибки
Дополнительные материалы
Условия получения бесплатного сертификата от Let’s Encrypt
Прежде чем начать, необходимо знать о некоторых нюансах получения сертификата Let’s Encrypt:
- При запросе выполняется проверка домена. Для этого необходимо:
- либо создать TXT-запись в DNS.
- либо поднять веб-сервер, далее в его корне создается каталог .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 добавляем:
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/html; allow all предоставляет доступ всем.
При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:
…
location ~ /.well-known/acme-challenge {
root /usr/share/nginx/html;
allow all;
}
if ($uri !~ /.well-known/acme-challenge){
return 301 https://$host$request_uri;
}
После проверяем конфигурацию и перезапускаем nginx:
nginx -t && nginx -s reload
Linux Apache
Создаем общий конфигурационный файл, в котором пропишем алиас.
а) для CentOS:
vi /etc/httpd/conf.d/lets.conf
б) для Ubuntu / Debian:
vi /etc/apache2/conf-enabled/lets.conf
Со следующим содержимым:
Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/
* в данном примере, запросы для страниц /.well-known/acme-challenge всех сайтов мы переводим в каталог /var/www/html/.well-known/acme-challenge.
Проверяем корректность конфигурационного файла:
apachectl configtest
И перезапускаем apache:
systemctl restart httpd || systemctl restart apache2
Windows
IIS должен отвечать на http-запрос до доменному имени, для которого мы планируем получить сертификат. Также в его настройках мы должны сделать привязку узла, для которого хотим получить сертификат к конкретному сайту. Для этого в консоли управления IIS раскрываем сайты и выбираем нужный нам (в данном примере, он всего один):
В меню справа кликаем по Привязки:
Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:
Применяем настройки и закрываем консоль управления IIS.
С помощью записи в DNS
Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.
У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.
Установка утилиты для получения сертификата
Certbot для Linux
1) Rocky Linux:
dnf install epel-release
dnf install certbot
2) на CentOS 8:
dnf —enablerepo=powertools install certbot
3) на CentOS 7:
yum install certbot
4) на Ubuntu 16.04 и выше, а также Debian:
apt update
apt install certbot
5) Универсальный через python-pip:
Пакет certbot является приложением python и для его установки нужно использовать модуль pip. Сам модуль также нужно поставить. В зависимости от дистрибутива Linux наша команда будет отличаться.
а) Для систем на базе DEB:
apt install python3-pip
б) Для систем на базе RPM:
yum install python3-pip
После установки пакета нам доступен модуль pip. Используем его для установки certbot.
Начнем с обновления самого модуля:
python3 -m pip install —upgrade pip
Выполняем установку:
python3 -m pip install certbot
6) Astra Linux:
Для астры не нашел репозитория установки certbot, но есть решение хоть и не красивое, но рабочее.
Загружаем deb-файлы для debian 10:
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/certbot_0.31.0-1+deb10u1_all.deb
wget http://ftp.de.debian.org/debian/pool/main/p/python-certbot/python3-certbot_0.31.0-1+deb10u1_all.deb
Пробуем установить python3-certbot:
dpkg -i python3-certbot_0.31.0-1+deb10u1_all.deb
Если мы получим ошибку зависимостей, например:
dpkg: зависимости пакетов не позволяют настроить пакет python3-certbot:
python3-certbot зависит от python3-acme (>= 0.29.0~), однако:
Пакет python3-acme не установлен.
python3-certbot зависит от python3-configargparse (>= 0.10.0), однако:
Пакет python3-configargparse не установлен.
python3-certbot зависит от python3-josepy, однако…
… выполняем команду:
apt install -f
Также мы можем посмотреть список зависимостей командой:
dpkg -I python3-certbot_0.31.0-1+deb10u1_all.deb
Будет выполнена установка зависимостей. После устанавливаем скачанные пакеты:
dpkg -i python3-certbot_0.31.0-1+deb10u1_all.deb
dpkg -i certbot_0.31.0-1+deb10u1_all.deb
7) на CentOS 6 или Ubuntu 14.04 / 12.04:
Создадим каталог, в котором будет храниться утилита и переходим в него:
mkdir /opt/certbot
cd /opt/certbot
Загружаем утилиту и разрешаем ее запуск:
wget https://raw.githubusercontent.com/certbot/certbot/7f0fa18c570942238a7de73ed99945c3710408b4/letsencrypt-auto-source/letsencrypt-auto -O /opt/certbot/letsencrypt-auto
chmod a+x ./letsencrypt-auto
Для удобства, делаем симлинк:
ln -s /opt/certbot/letsencrypt-auto /usr/local/sbin/certbot
Запустим команду:
certbot
При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.
LetsEncrypt-Win-Simple для Windows
На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:
Раcпаковываем скачанный архив в любую папку.
Первое получение сертификата
Linux
1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:
certbot certonly —webroot —agree-tos —email <почта администратора домена> —webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -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:
W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm
Once this is deployed,
* Данное сообщение говорит, что мы должны создать TXT-запись _acme-challenge.dmosk.ru со значением W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm.
Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.
Windows
Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:
cd C:\win-acme.v2.1.6.773.x64.pluggable
* где 2.1.6.773.x64 — моя версия утилиты.
Запускаем wacs:
wacs.exe
Если запускаем в Powershel, то так:
.\wacs.exe
Утилита формирует бинарный сертификат для Windows, но если мы хотим получить файлы в формате pem, вводим:
wacs.exe —store pemfiles —pemfilespath C:\Certificates
* где pemfilespath — путь до каталога, в котором должны оказаться файлы сертификата.
Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:
Обратите внимание, что в зависимости от версии win-acme, некоторые пункты могут отличаться. Внимательно просмотрите варианты.
Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):
Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:
Вводим email адрес и подтверждаем корректность данных:
Утилита создаст необходимый каталог для проверки домена, запросит проверку, получит сертификат, добавит привязку к сайту по 443 порту с добавлением полученного сертификата и создаст в планировщике задание на автоматическое продление сертификата.
Автоматическое продление
Утилита certbot позволяет выполнить обновление сертификата в автоматическом режиме. В зависимости от операционной системы, инструменты различаются.
Linux
Открываем на редактирование cron и добавляем следующее:
crontab -e
Если система вернет ошибку crontab: command not found, устанавливаем пакет cron и запускаем сервис.
а) Для deb-систем:
apt install cron
б) Для rpm-систем:
yum install cron
systemctl enable crond —now
Прописываем строку.
0 0 * * 1,4 /usr/bin/certbot renew —noninteractive
* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00.
Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.
Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Для этого открываем файл:
vi /etc/letsencrypt/cli.ini
И добавляем строку с командной перезапуска нужного нам приложения, например:
…
deploy-hook = systemctl reload nginx
Windows
Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:
Используем docker
Рассмотрим отдельный способ получить сертификат, если у нас на компьютере нет веб-сервера, но работает docker. В этом случае, мы можем запустить контейнер certbot, и выполнить в нем все необходимые процедуры.
Контейнер certbot поддерживает два сценария запуска:
- Запустить свой веб-сервер.
- Использовать имеющийся веб-сервер.
Мы рассмотрим вариант 1.
А вариант 2 описан в другой статье — Docker-compose для создания веб-сервера.
Запускаем контейнер certbot/certbot и выполняем в нем команду certonly:
docker run -it —rm —name certbot -p 80:80 -v «/etc/letsencrypt:/etc/letsencrypt» -v «/var/lib/letsencrypt:/var/lib/letsencrypt» certbot/certbot certonly
На первом шаге нас спросят, в каком режиме включить certbot — выбираем вервый (запуск веб-сервера):
How would you like to authenticate with the ACME CA?
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
1: Runs an HTTP server locally which serves the necessary validation files under
the /.well-known/acme-challenge/ request path. Suitable if there is no HTTP
server already running. HTTP challenge only (wildcards not supported).
(standalone)
2: Saves the necessary validation files to a .well-known/acme-challenge/
directory within the nominated webroot path. A seperate HTTP server must be
running and serving files from the webroot path. HTTP challenge only (wildcards
not supported). (webroot)
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Select the appropriate number [1-2] then [enter] (press ‘c’ to cancel): 1
При вервом запуске контейнера, необходимо указать адрес электронной почты:
Enter email address (used for urgent renewal and security notices)
(Enter ‘c’ to cancel): master@dmosk.ru
Принято лицензионное соглашение:
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.3-September-21-2022.pdf. You must
agree in order to register with the ACME server. Do you agree?
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
(Y)es/(N)o: Y
Подписка на рассылки о статусе сертификатов:
Would you be willing, once your first certificate is successfully issued, to
share your email address with the Electronic Frontier Foundation, a founding
partner of the Let’s Encrypt project and the non-profit organization that
develops Certbot? We’d like to send you email about our work encrypting the web,
EFF news, campaigns, and ways to support digital freedom.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
(Y)es/(N)o: N
* Y если хотим получать рассылки или N — чтобы контролировать процесс без оповещений на почту.
Вводим через пробел доменные имена, для которых мы должны получить сертификаты:
Please enter the domain name(s) you would like on your certificate (comma and/or
space separated) (Enter ‘c’ to cancel): dmosk.ru www.dmosk.ru
* как и в случае с обысной проверкой, данные имена должны вести на наш сервер, на котором запускается docker-контейнер.
Если операция прошла успешно, мы должны увидеть:
…
Successfully received certificate.
…
Для продления сертификатов с помощью docker вводим команду:
docker run -it —rm —name certbot -p 80:80 -v «/etc/letsencrypt:/etc/letsencrypt» -v «/var/lib/letsencrypt:/var/lib/letsencrypt» certbot/certbot renew
Wildcard
С марта 2018 года появилась возможность получить бесплатный сертификат на все поддомены, например, mail.dmosk.ru, test.dmosk.ru, admin.dmosk.ru (*.dmosk.ru).
Особенности получения Wildcard от Let’s Encrypt:
- Подтвердить право использования доменом можно только с помощью DNS — таким образом, затрудняется процесс автоматического продления. Нужно использовать плагины, которые позволяют автоматически создавать нужную запись на DNS, но они доступны далеко не для всех поставщиков услуг DNS. В противном случае, обновлять Wildcard нужно вручную.
Также, некоторые панели управления хостингом, например ISP Manager с версии 5 могут управлять процессом получения Wildcard от Let’s Encrypt с возможностью автоматического продления (но необходимо, чтобы домен обслуживался на данном хостинге). - Время действия сертификата также ограничено 3 месяцами.
Certbot
Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:
certbot —version
… если версия ниже, обновляем ее командами:
а) для CentOS / Red Hat:
yum update certbot
б) для Ubuntu / Debian:
apt update
apt 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:
DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI
Before continuing, verify the record is deployed.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
* в данном примере система попросила создать 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
… сертификат получен.
Полезные команды
Рассмотрим некоторые полезные команды утилиты certbot для работы с сертификатами Let’s Encrypt.
1. Показать группы сертификатов:
certbot certificates
2. Удалить сертификат:
certbot delete -d dmosk.ru
После получения сертификата мы не сможем экспортировать его с закрытым ключом. Мы можем изменить поведение, открыв файл settings.json в распакованном каталоге win-acme. Находим параметр PrivateKeyExportable и задаем ему значение:
«PrivateKeyExportable»: true,
После обновляем сертификат:
.\wacs.exe —renew —force
Или без обновления сертификата мы можем найти файл .pfx в каталоге: %programdata%\win-acme\$baseuri$\certificates.
Пароль для pfx можно найти в интерактивном меню wacs:
Manage Renewals > Show details
Сертификат Let’s Encrypt для почтового сервера MS Exchange
В комплекте установленного нами LetsEncrypt-Win-Simple для Windows идет скрипт ImportExchange.v2.ps1. Он нужен для импорта сертификата в конфигурацию почтового сервера MS Exchange.
Для начала создадим каталог, куда будет выгружен сертификат. В моем примере я воспользуюсь путем C:\SSL.
Допустим, что адрес подключения к серверу будет exchange.dmosk.ru. Тогда получить сертификат и импортировать его в Exchange можно командой:
wacs.exe —source manual —host exchange.dmosk.ru,autodiscover.dmosk.ru —store centralssl,certificatestore —certificatestore My —acl-fullcontrol «network service,administrators» —centralsslstore «C:\SSL» —installation iis,script —installationsiteid 1 —script «./Scripts/ImportExchange.v2.ps1» —scriptparameters «‘{CertThumbprint}’ ‘IIS,SMTP,IMAP’ 1 ‘{CacheFile}’ ‘{CachePassword}’ ‘{CertFriendlyName}'»
* данная команда запросит сертификат для узлов exchange.dmosk.ru и autodiscover.dmosk.ru, сохранит нужные файлы в каталоге C:\SSL и импортирует полученные ключи в Microsoft Exchange Server.
Если мы запускаем команду в оболочке PowerShel, клманда должна начинаться с:
.\wacs.exe …
После успешного выполнения команды, заходим в консоль управления сервером, переходим на вкладку управления сертификатами. В списке мы должны увидеть полученную последовательность от Let’s Encrypt. Кликаем по ней и назначаем сертификат для нужных служб Exchange (как правило, SMTP, IIS).
Возможные ошибки
Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.
1. Missing command line flag or config entry for this setting
Ошибка появляется при попытке обновить сертификат для одного или нескольких доменов.
Причина: при обновлении сертификата, утилита certbot ищет настройки в конфигурационном файле /etc/letsencrypt/renewal/<имя домена>.conf. Если в данном файле не будет определена конфигурация для webroot_map, мы получим данную ошибку.
Решение:
Открываем конфигурационный файл для домена, например:
vi /etc/letsencrypt/renewal/dmoks.ru.conf
Находим опцию webroot_map (как правило, в самом низу). Либо она будет пустой, либо указывать на неправильный путь. Исправляем это:
dmoks.ru = /usr/share/nginx/html
* мы указываем домен и каталог, в котором будет создаваться проверочный файл.
Пробуем обновить сертификат.
2. ACMEv1 is deprecated and you can no longer get certificates from this endpoint
Ошибка появляется при попытке запросить или обновить сертификат. Полный текст ошибки:
Attempting to renew cert (xxx) from /etc/letsencrypt/renewal/xxx.conf produced an unexpected error: urn:acme:error:serverInternal :: The server experienced an internal error :: ACMEv1 is deprecated and you can no longer get certificates from this endpoint. Please use the ACMEv2 endpoint, you may need to update your ACME client software to do so. Visit https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430/27 for more information.. Skipping.
Причина: утилита на компьютере устарела. Она пытается использовать API-портал ACMEv1, который больше не поддерживается.
Решение: обновляем утилиту certbot.
а) Для Ubuntu/Debian:
apt update
apt —only-upgrade install certbot
б) Для Rocky Linux/CentOS:
yum update certbot
3. Remote error: tls: handshake failure
Ошибка появляется при попытке запросить или обновить сертификат.
Причина: Let’s Encrypt отключил устаревшие наборы шифров TLS во время проверки.
Решение: если проверка выполняется на веб через https, то нам потребуется, чтобы последний работал с TLS современной версии. На момент обновления данной инструкции, 1.3.
Чтобы решить проблему, необходимо обновить веб-сервер до актуальной версии. А также убедиться, что в настройках не указаны конкретные шифры без нужной версии. Например, если в NGINX будет настройка:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
… то мы получим ошибку. Для ее решения нужно добавить шифр:
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
И не забываем перезапустить nginx:
nginx -t && nginx -s reload
Читайте также
Другие полезные материалы:
1. Примеры редиректов в NGINX.
2. Настройка Apache + SSL для работы сайта по HTTPS.
3. Установка Docker на Linux.
#15
понедельник, 3 июля 2023 г.
9 минут(ы)
761 слово
Установка Certbot на Windows
-
Проверьте официальный сайт Certbot для получения полных инструкций https://certbot.eff.org/instructions
-
Загрузите последнюю версию программы установки Certbot для Windows по адресу https://github.com/certbot/certbot/releases/download/v2.9.0/certbot-beta-installer-win_amd64_signed.exe.
-
Запустите программу установки и следуйте указаниям мастера. Программа установки предложит каталог установки по умолчанию, C:\Program Files(x86), замените его на C:\Certbot).
-
Чтобы запустить оболочку для Certbot, выберите меню «Пуск», введите cmd (для запуска CMD.EXE) или powershell (для запуска PowerShell) и нажмите «Запуск от имени администратора» в появившемся контекстном меню.
-
Перейдите в каталог Certbot
Чтобы выполнить команду на Certbot, введите в оболочке имя certbot, затем команду и ее параметры. Например, чтобы отобразить встроенную справку, выполните:
C:\Certbot>certbot --help
Выберите, как вы хотите запустить Certbot
Вы не против временной остановки вашего сайта?
Да, мой веб-сервер в настоящее время не запущен на этой машине.
Остановите свой веб-сервер, затем выполните эту команду, чтобы получить сертификат. Certbot временно запустит веб-сервер который уже использует порт 80 на вашей машине.
C:\Certbot>certbot certonly --standalone
Нет, мне нужно, чтобы мой веб-сервер работал.
Если у вас есть веб-сервер, который уже использует порт 80 и вы не хотите останавливать его на время работы Certbot, запустите эту команду и следуйте инструкциям в терминале.
C:\Certbot>certbot certonly --webroot
Важное замечание:
Чтобы использовать плагин webroot, ваш сервер должен быть настроен на обслуживание файлов из скрытых каталогов. Если /.well-known обрабатывается особым образом в конфигурации вашего веб-сервера, вам может потребоваться изменить конфигурацию, чтобы файлы внутри /.well-known/acme-challenge обслуживались веб-сервером
Проверка автоматического обновления
Установка Certbot в вашей системе поставляется с предустановленной запланированной задачей, которая будет автоматически обновлять ваши сертификаты до истечения срока их действия. Вам не нужно будет запускать Certbot снова, если вы не измените свою конфигурацию. Вы можете проверить автоматическое обновление ваших сертификатов, выполнив команду
C:\Certbot>certbot renew --dry-run
Если вам нужно остановить ваш веб-сервер для запуска Certbot (например, если вы использовали автономный аутентификатор на машине, где обычно используется порт 80), вам нужно отредактировать встроенную команду и добавить флаги —pre-hook и —post-hook для автоматической остановки и запуска вашего веб-сервера.
Флаги —pre-hook и —post-hook позволяют запускать команды до и после основной операции Certbot соответственно. Это особенно полезно, когда нужно остановить веб-сервер перед обновлением сертификата и затем снова его запустить. Вот как вы можете использовать эти флаги с Nginx на Windows через WSL:
certbot certonly --standalone --pre-hook "net.exe nginx stop" --post-hook "net.exe nginx start" -d yourdomain.com
В этой команде:
- certbot certonly —standalone говорит Certbot запрашивать сертификат, работая в автономном режиме. Это означает, что Certbot самостоятельно запускает временный веб-сервер для проверки вашего домена.
- —pre-hook «net.exe nginx stop» говорит Certbot остановить Nginx перед запросом сертификата.
- —post-hook «net.exe nginx start» говорит Certbot запустить Nginx снова после запроса сертификата.
- -d yourdomain.com указывает домен, для которого вы запрашиваете сертификат.
Замените yourdomain.com на ваш настоящий домен.
Эти флаги также можно использовать с командой certbot renew для автоматического обновления сертификатов:
certbot renew --pre-hook "net.exe nginx stop" --post-hook "net.exe nginx start"
В этой команде certbot renew говорит Certbot проверить все установленные сертификаты и обновить те, которые скоро истекут.
Если ваш веб-сервер — Apache 2.4, добавьте следующее к команде certbot renew:
--pre-hook "net.exe stop Apache2.4" --post-hook "net.exe start Apache2.4".
Процесс настройки Nginx для использования SSL-сертификата Let’s Encrypt:
-
Получите сертификат, используя win-acme, Certify The Web или Certbot. Убедитесь, что вы знаете, где хранятся файлы сертификата и ключа.
-
Откройте файл конфигурации Nginx для вашего сайта. Он обычно находится в каталоге C:\nginx\conf\nginx.conf.
-
Добавьте следующие строки в блок server для вашего сайта, заменив /etc/letsencrypt/live/your-domain-name/fullchain.pem и /etc/letsencrypt/live/your-domain-name/privkey.pem на путь к вашему сертификату и ключу:
Пример для сайта d00m4ace.com
http {
server {
listen 80;
server_name d00m4ace.com; # например d00m4ace.com
# Перенаправление всех HTTP-запросов на HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name d00m4ace.com; # например d00m4ace.com
# Настройки SSL сертификата
ssl_certificate C:\Certbot\live\hexplay.com\fullchain.pem; # managed by Certbot
ssl_certificate_key C:\Certbot\live\hexplay.com\privkey.pem; # managed by Certbot
# Другие настройки SSL, если необходимо
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
# Добавьте здесь ваши настройки для обработки HTTPS-соединений
# Например:
location / {
root C:/microweb/webroot; # путь_к_вашему_корневому_каталогу;
index index.html;
}
}
# Добавьте другие серверные блоки, если необходимо
}
- Проверьте, что ваша конфигурация Nginx корректна, используя команду nginx -t.
- Если все в порядке, перезапустите Nginx, чтобы применить новую конфигурацию. Это обычно делается с помощью команды nginx -s reload.
Пожалуйста, имейте в виду, что Let’s Encrypt выдает сертификаты только на 90 дней, поэтому вам нужно будет настроить автоматическое обновление сертификатов. Это обычно делается с помощью cron задания на Unix-подобных системах или с помощью планировщика заданий Windows.