Настройка 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.

  1. Запуск команды:
C:\Certbot>certbot certonly --webroot

Команда certbot certonly --webroot запускает Certbot для получения сертификата, используя существующий веб-сервер. Опция --webroot указывает Certbot использовать папку веб-сервера, где хранятся веб-страницы.

  1. Логи:
Saving debug log to C:\Certbot\log\letsencrypt.log

Certbot сохраняет логи процесса в файл letsencrypt.log в указанной папке.

  1. Ввод домена:

Пример для одного доммена - 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 выпустит один сертификат, действительный для всех этих доменов и поддоменов.

  1. Запрос сертификата:
Requesting a certificate for my.domain.com

Certbot начинает процесс запроса сертификата для введённого домена.

  1. Ввод корневого каталога веб-сервера (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 можно использовать Планировщик задач. Вот как это сделать:

  1. Откройте Планировщик задач (Task Scheduler) через Панель управления или поиск в меню «Пуск».
  2. Выберите Создать задачу (Create Task).
  3. На вкладке Общие (General):
  4. Установите имя задачи, например, "Certbot Auto Renew".
  5. Перейдите на вкладку Триггеры (Triggers):
  6. Нажмите Создать (New), чтобы создать новый триггер.
  7. Установите расписание, например, «Ежедневно» (Daily).
  8. На вкладке Действия (Actions):
  9. Нажмите Создать (New), чтобы добавить действие.
  10. В поле Программа или сценарий (Program/script) введите путь к certbot.exe. Например: C:\Certbot\certbot.exe
  11. В поле Аргументы (Add arguments) добавьте команду для обновления: renew --quiet Опция --quiet заставляет Certbot работать без вывода информации, если всё прошло успешно.
  12. Сохраните задачу.

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

Заключение:

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