SSL lets encrypt – Бесплатно. Cerbot.

Сerbot установка

Для добавления SSL с помощью Let’s Encrypt вам понадобится использовать инструмент Certbot. Выполните команды для его установки на сервере с Nginx:

sudo apt update
sudo apt install certbot

Cerbot + NGINX

Так как многие используют nginx в качестве веб-сервера, детально рассмотрим установку cerbot, получение сертификатов и их настройку именно в этой связке.

1. Установка Cerbot и плагина для их работы в связке с nginx. Команды:

sudo apt update
sudo apt install certbot python3-certbot-nginx

2. Получите и установите SSL-сертификаты для вашего домена. Запустите следующую команду, заменив example.com на ваш домен:

sudo certbot certonly --nginx -d example.com -d www.example.com

Или поддомена:

sudo certbot certonly --nginx -d blog.example.com -d www.example.com

Certbot автоматически настроит Nginx для выполнения проверки домена и получения сертификата от Let’s Encrypt. Сертификаты будут сохранены в /etc/letsencrypt/live/example.com/ (замените example.com на ваш домен).

3. Обновите ваш файл конфигурации Nginx для включения SSL. Откройте файл конфигурации вашего сайта в Nginx (находится в /etc/nginx/sites-available/) и внесите следующие изменения (данный файл взят просто для примера):

server {
    listen 80;
    server_name example.com www.example.com;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl;
    server_name example.com www.example.com;
   
    # Добавляем пути сертификата к доменам
    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
	# end Добавляем пути сертификата к доменам

    # Дополнительные настройки SSL, если требуется
    # ...

    location / {
        proxy_pass http://127.0.0.1:3001;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection 'upgrade';
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

Здесь мы добавляем блок server для прослушивания порта 443 с использованием SSL. Укажите пути к вашим сертификатам в директиве ssl_certificate и ssl_certificate_key.

4. Проверьте синтаксис конфигурации Nginx и перезапустите его:

sudo nginx -t
sudo systemctl restart nginx

Теперь ваш сайт должен быть доступен по протоколу HTTPS с использованием сертификата Let’s Encrypt.

Обратите внимание, что Certbot автоматически обновляет сертификаты Let’s Encrypt каждые 90 дней. Это позволит вам не беспокоиться о регулярном обновлении сертификатов вручную.

SSL Wildcart Lets Encrypt с помощью Cerbot

Чтобы не создавать ssl отдельно для каждого поддомена используют SSL Wildcart. Таким образом мы создаём всего лишь один ssl который будет применятся ко всем поддоменам.

Установка и настройка SSL Wildcart

Рассмотрим на примере домена examle.com

1. Установите Cerbot (написано в начале статьи).

2. Добавьте А запись к вашему домену, делается это в панели управления доменом вашего регистратора, такого вида:

*.example.com.   3600  IN  A  203.0.113.1

Подстановочный *знак рассматривается как замена для любого имени хоста. Например эти DNS-запись могут выглядеть так one.example.com или вот так blog.example.com.

Чтобы проверить, что ваш подстановочный DNS работает как следует, выполните следующую команду для запроса имени хоста(не забудьте поменять на ваш домен):

host one.example.com

Если всё ок, вы получите примерно такой ответ:

one.example.com has address 203.0.113.1

В противном случае вы получите ошибку:

Host one.example.com not found: 3(NXDOMAIN)

Если всё ок, то переходим к следующим пунктам!
Если нет, скорее всего вы не правильно добавили A запись, либо добавленные записи не успели обновится, поэтому возможно после добавления A записи домену, имеет смысл подождать несколько минут(но это не точно 😀 ). Также вы можете обратиться в поддержку регистратора домена и попросить их помочь вам сделать это правильно, либо вообще сделать им это самим, встречается и такое, что в панели регистратора нет возможности добавлять A записи.

3. Возвращаемся в ssh-клиент и вводим команду (не забудьте изменить example.com, на имя вашего домена):

certbot certonly --agree-tos --manual --preferred-challenges dns --server https://acme-v02.api.letsencrypt.org/directory  -d *.example.com -d example.com

Данная команда запрашивает wildcard SSL-сертификат для домена и всех его поддоменов.
Внимание! Когда закончится выполнение кода, не нажимаем Enter, а смотрим 4 пункт.

Разберём каждый параметр этой команды:

  • certonly: Этот параметр указывает Certbot’у, что нужно выпустить только сертификаты, но не устанавливать их автоматически на веб-сервер.
  • --agree-tos: Этот параметр указывает Certbot’у, что вы соглашаетесь с условиями использования сервиса Let’s Encrypt.
  • --manual: Этот параметр указывает Certbot’у использовать ручной режим подтверждения владения доменом.
  • --preferred-challenges dns: Этот параметр указывает Certbot’у, что предпочтительным методом проверки владения доменом будет использование DNS-записей. Certbot предоставит вам инструкции о том, как добавить специальную DNS-запись для подтверждения владения доменом.
  • --server https://acme-v02.api.letsencrypt.org/directory: Этот параметр указывает Certbot’у использовать сервер Let’s Encrypt для выпуска сертификатов. В данном случае, указывается URL-адрес https://acme-v02.api.letsencrypt.org/directory.
  • -d *.example.com: Этот параметр указывает основной домен, для которого нужно получить wildcard SSL-сертификат. Здесь указан домен *.example.com, где символ * является символом подстановки, позволяющим сертификату быть действительным для всех поддоменов домена example.com.
  • -d example.com: Этот параметр указывает еще один домен, для которого нужно получить SSL-сертификат. Здесь указан основной домен example.com, чтобы сертификат был действительным и для этого домена.

4. Далее Cerbot создаст DNS запись, TXT типа, которую вам нужно будет добавить в DNS записи вашего домена в панели регистратора. Вот так например выглядит добавленная запись в панели регистратора Timeweb:

Примечание! Записи обновляются в течение 5-15 минут, поэтому нажать Enter в certbot для подтверждения запроса нужно минимум через 5 минут после добавления записей. А лучше всего, чтобы точно убедиться, что записи обновились, сначала перейти сюда https://toolbox.googleapps.com/apps/dig/#TXT/ , в поле имя вводим нашу запись, например _acme-challenge.example.com, и смотрим результат если ответ отрицательный – ждём ещё, если положительный – идём дальше.

5. Возвращаемся в ssh-клиент и жмём Enter

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

Обратите внимание, что Certbot НЕ обновляет автоматически сертификаты Wildcart Let’s Encrypt, сертификат действует 90 дней. Поэтому данную процедуру нужно проводить постоянно по истечению этого срока, либо написать скрипт, который это будет делать за вас.