Настройка Certbot и Nginx для работы с HTTPS в Windows. Обновленая весрия от 2024 года.
#113 среда, 11 сентября 2024 г. понедельник, 23 сентября 2024 г. 15 минут(ы) 1391 слово
Установка 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
cd C:\Certbot
Чтобы выполнить команду на Certbot, введите в оболочке имя certbot, затем команду и ее параметры. Например, чтобы отобразить встроенную справку, выполните:
C:\Certbot>certbot --help
Нужно, чтобы мой веб-сервер работал при обновление сертификата SSL.
Если у вас есть веб-сервер, который уже использует порт 80 и вы не хотите останавливать его на время работы Certbot, запустите эту команду и следуйте инструкциям в терминале.
C:\Certbot>certbot certonly --webroot
Этот вывод команды объясняет процесс получения SSL-сертификата с помощью Certbot с опцией --webroot
на Windows.
- Запуск команды:
C:\Certbot>certbot certonly --webroot
Команда certbot certonly --webroot
запускает Certbot для получения сертификата, используя существующий веб-сервер. Опция --webroot
указывает Certbot использовать папку веб-сервера, где хранятся веб-страницы.
- Логи:
Saving debug log to C:\Certbot\log\letsencrypt.log
Certbot сохраняет логи процесса в файл letsencrypt.log
в указанной папке.
- Ввод домена:
Пример для одного доммена - my.domain.com:
Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter 'c' to cancel): my.domain.com
Certbot запрашивает домен (или несколько доменов), для которых вы хотите выпустить сертификат. Здесь был введён домен my.domain.com
.
Пример для доммена и его поддоменов - domain.com, www.domain.com, api.domain.com:
Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter 'c' to cancel): domain.com, www.domain.com, api.domain.com
Certbot запрашивает список доменов, для которых вы хотите выпустить сертификат. В этом примере указаны основной домен domain.com и два поддомена: www.domain.com и api.domain.com. Все домены должны быть указаны через запятую или пробел.
domain.com — основной домен.
www.domain.com — поддомен, который обычно используется для основной версии сайта.
api.domain.com — поддомен, который может использоваться для API.
Certbot выпустит один сертификат, действительный для всех этих доменов и поддоменов.
- Запрос сертификата:
Requesting a certificate for my.domain.com
Certbot начинает процесс запроса сертификата для введённого домена.
- Ввод корневого каталога веб-сервера (webroot):
Input the webroot for my.domain.com: (Enter 'c' to cancel): C:\WEBSERVER\html\
Certbot просит указать путь к корневой папке веб-сервера для данного домена. Это папка, откуда сервер обслуживает файлы сайта. Здесь указан путь C:\WEBSERVER\html\
. Certbot разместит в этой папке временные файлы для подтверждения владения доменом.
В итоге Certbot проверит наличие временных файлов в каталоге C:\WEBSERVER\html\
для домена my.domain.com
, чтобы убедиться, что вы действительно владеете доменом, и затем выпустит SSL-сертификат.
Важное замечание: Чтобы использовать плагин webroot, ваш сервер должен быть настроен на обслуживание файлов из скрытых каталогов. Если /.well-known обрабатывается особым образом в конфигурации вашего веб-сервера, вам может потребоваться изменить конфигурацию, чтобы файлы внутри /.well-known/acme-challenge обслуживались веб-сервером
Проверка автоматического обновления
Установка Certbot в вашей системе поставляется с предустановленной запланированной задачей, которая будет автоматически обновлять ваши сертификаты до истечения срока их действия. Вам не нужно будет запускать Certbot снова, если вы не измените свою конфигурацию. Вы можете проверить автоматическое обновление ваших сертификатов, выполнив команду
C:\Certbot>certbot renew --dry-run
И ее результат:
C:\Certbot>certbot renew --dry-run
Saving debug log to C:\Certbot\log\letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Processing C:\Certbot\renewal\api.domain.com.conf
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Account registered.
Simulating renewal of an existing certificate for api.domain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations, all simulated renewals succeeded:
C:\Certbot\live\api.domain.com\fullchain.pem (success)
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Процесс настройки Nginx для использования SSL-сертификата Let's Encrypt:
-
Получите сертификат, используя win-acme, Certify The Web или Certbot. Убедитесь, что вы знаете, где хранятся файлы сертификата и ключа.
-
Откройте файл конфигурации Nginx для вашего сайта. Он обычно находится в каталоге C:\WEBSERVER\conf\nginx.conf.
-
Добавьте следующие строки в блок server для вашего сайта, заменив
C:\Certbot\live\d00m4ace.com\fullchain.pem
иC:\Certbot\live\d00m4ace.com\privkey.pem
на путь к вашему сертификату и ключу.
Пример для сайта d00m4ace.com:
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
server {
listen 80;
server_name d00m4ace.com; # например d00m4ace.com
#location / {
# root html;
# index index.html index.htm;
#}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
#error_page 500 502 503 504 /50x.html;
#location = /50x.html {
# root html;
#}
# Перенаправление всех HTTP-запросов на HTTPS
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name d00m4ace.com; # например d00m4ace.com
# Настройки SSL сертификата
ssl_certificate C:\Certbot\live\d00m4ace.com\fullchain.pem; # managed by Certbot
ssl_certificate_key C:\Certbot\live\d00m4ace.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:\WEBSERVER\html; # путь_к_вашему_корневому_каталогу;
index index.html;
#proxy_pass http://localhost:8084;
# proxy_set_header Host $host;
# proxy_set_header X-Real-IP $remote_addr;
# proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# proxy_set_header X-Forwarded-Host $host:$server_port;
# proxy_set_header X-Forwarded-Port $server_port;
}
}
# Добавьте другие серверные блоки, если необходимо
}
- Проверьте, что ваша конфигурация Nginx корректна, используя команду nginx -t.
nginx -t
- Если все в порядке, перезапустите Nginx, чтобы применить новую конфигурацию. Это обычно делается с помощью команды nginx -s reload.
nginx -s reload
Пожалуйста, имейте в виду, что Let's Encrypt выдает сертификаты только на 90 дней, поэтому вам нужно будет настроить автоматическое обновление сертификатов.
Проверка и ручное обновление сертификатов через Certbot
Let's Encrypt выдает сертификаты, которые действуют 90 дней. Certbot может автоматически обновлять сертификаты, но иногда требуется проверить или обновить их вручную. Вот как это можно сделать:
1. Проверка оставшегося срока действия сертификатов:
Для того чтобы проверить, сколько времени осталось до истечения сертификата, используйте следующую команду:
C:\Certbot>certbot certificates
Эта команда покажет список всех установленных сертификатов и информацию о них, включая: - Домены, на которые выданы сертификаты - Местоположение файлов сертификатов - Дату истечения срока действия сертификата
Пример вывода:
Found the following certs:
Certificate Name: my.domain.com
Domains: my.domain.com, www.my.domain.com
Expiry Date: 2024-12-31 23:59:59+00:00 (VALID: 30 days)
Certificate Path: C:\Certbot\live\my.domain.com\fullchain.pem
Private Key Path: C:\Certbot\live\my.domain.com\privkey.pem
2. Ручное обновление сертификатов:
Чтобы вручную обновить сертификаты, используйте следующую команду:
C:\Certbot>certbot renew
Эта команда проверит все сертификаты и попытается обновить те, срок действия которых подходит к концу (менее 30 дней). Certbot выполнит автоматические шаги, чтобы запросить новый сертификат для каждого домена, используя ту же конфигурацию, что и при первоначальном выпуске.
3. Настройка автоматического обновления (Windows Task Scheduler):
Для автоматического обновления сертификатов на Windows можно использовать Планировщик задач. Вот как это сделать:
- Откройте Планировщик задач (Task Scheduler) через Панель управления или поиск в меню «Пуск».
- Выберите Создать задачу (Create Task).
- На вкладке Общие (General):
- Установите имя задачи, например, "Certbot Auto Renew".
- Перейдите на вкладку Триггеры (Triggers):
- Нажмите Создать (New), чтобы создать новый триггер.
- Установите расписание, например, «Ежедневно» (Daily).
- На вкладке Действия (Actions):
- Нажмите Создать (New), чтобы добавить действие.
- В поле Программа или сценарий (Program/script) введите путь к
certbot.exe
. Например:C:\Certbot\certbot.exe
- В поле Аргументы (Add arguments) добавьте команду для обновления:
renew --quiet
Опция--quiet
заставляет Certbot работать без вывода информации, если всё прошло успешно. - Сохраните задачу.
Теперь Windows будет автоматически запускать эту задачу по расписанию и обновлять ваши сертификаты.
Заключение:
Регулярная проверка и настройка автоматического обновления сертификатов важна для того, чтобы избежать проблем с истекшими сертификатами.