Бесплатный сертификат от Letsencrypt по степени защиты не уступает платным сертификатам. Поэтому это хорошая возможность получить бесплатный SSL сертификат для сайта.
Чтобы выпустить сертификат, сначала нужно установить программу, которая будет управлять сертификатами на вашем хосте — certbot.
В данном примере на хосте ОС CentOS Stream 9 со стеком LEMP. certbot включен в репозиторий EPEL, убедитесь что данный репозиторий установлен на сервере:dnf install -y epel-release
Устанавливаем certbot:dnf install -y certbot
Для выпуска сертификата мы будем использовать команду вида:certbot certonly -v --webroot -w /path/to/web/dir/ -d example.ru -d www.example.ru
где /path/to/web/dir/ — должен быть путь до вашей веб директории, а после -d следуют ваши доменные имена, для которых будет действовать SSL сертификат. Веб директорию можно найти в настройках вашего веб сервера. В примере это NGINX, по умолчанию директория задается в файле /etc/nginx/nginx.conf с помощью root:
[root@waky ~]# grep root /etc/nginx/nginx.conf
root /usr/share/nginx/html;
# root /usr/share/nginx/html;
Если вы сомневаетесь является ли директория корневой для вашего сайта, есть простой способ это проверить. Создайте в этой директории простой текстовый файл используя текстовый редактор, и попробуйте открыть его в браузере example.ru/test.txtvi /usr/share/nginx/html/test.txt
Чтобы выпустить сертификат для обозначенных доменных имен, их DNS записи должны указывать на IP адрес хоста. А так же эти домены должны быть прописаны в настройках NGINX через server_name:vi /etc/nginx/nginx.conf

После внесения изменений перезапускаем NGINX:nginx -s reload
Проверили, что доменные имена смотрят на наш хост, и в браузере открывается наш тестовый файл. Теперь мы готовы запустить команду:
[root@waky ~]# certbot certonly -v --webroot -w /usr/share/nginx/html/ -d waky.ru -d www.waky.ru
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Enter email address (used for urgent renewal and security notices)
(Enter 'c' to cancel): example@example.ru
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.4-April-3-2024.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
Account registered.
Requesting a certificate for waky.ru and www.waky.ru
Performing the following challenges:
http-01 challenge for waky.ru
http-01 challenge for www.waky.ru
Using the webroot path /usr/share/nginx/html for all unmatched domains.
Waiting for verification...
Cleaning up challenges
Successfully received certificate.
Certificate is saved at: /etc/letsencrypt/live/waky.ru/fullchain.pem
Key is saved at: /etc/letsencrypt/live/waky.ru/privkey.pem
This certificate expires on 2025-05-05.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Первый вопрос, наш email для извещений о состоянии нашего сертификата. Если не хотим указывать можно перезапустить команду с опцией —register-unsafely-without-email
Второй вопрос, принимаем ли мы условия Letsencrypt. Если интересны подробности можете прочитать в указанном документе.
Третий вопрос, хотим ли мы получать на наш email новости касательно сферы защиты данных.
Первый и третий вопросы на ваше усмотрение. Второй придется согласиться, это необходимое условие для получения бесплатного SSL сертификата от Letsencrypt.
Если верификация использованных доменов прошла успешно, certbot создаст два файла:Certificate is saved at: /etc/letsencrypt/live/waky.ru/fullchain.pem
Key is saved at: /etc/letsencrypt/live/waky.ru/privkey.pem
Теперь нужно прописать их в настройках NGINX. Открываем файл конфигурации:vi /etc/nginx/nginx.conf
если это новый сервер, то в файле будут следующие закомментированные строки:
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2;
# listen [::]:443 ssl http2;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers PROFILE=SYSTEM;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
Нам нужно раскомментировать все строки начиная с server, а в строках ssl_certificate и ssl_certificate_key указать путь до файлов которые создал certbot. Так же не забываем добавить строки server_name с соответствующими доменами.

После внесенных изменений настройки будут выглядеть следующим образом:
# Settings for a TLS enabled server.
#
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name waky.ru;
server_name www.waky.ru;
root /usr/share/nginx/html;
ssl_certificate "/etc/letsencrypt/live/waky.ru/fullchain.pem";
ssl_certificate_key "/etc/letsencrypt/live/waky.ru/privkey.pem";
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 10m;
ssl_ciphers PROFILE=SYSTEM;
ssl_prefer_server_ciphers on;
# Load configuration files for the default server block.
include /etc/nginx/default.d/*.conf;
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
В итоге в конфигурации у вас должно получится два сервера, один использующий порт 80, другой 443. Проверяем конфигурацию и перезапускаем NGINX:
[root@waky ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@waky ~]# nginx -s reload
Проверяем, открываем в браузере страницу с вашим сайтом, прописываем https чтобы использовалось защищенное соединение https://waky.ru/

Теперь мы знаем, как сделать SSL сертификат бесплатно. Сертификат Letsencrypt имеет лишь один недостаток, он выпускается всего на 3 месяца, но его можно обновлять, когда срок действия подходит к концу. Для этого используется команда:/usr/bin/certbot renew
Чтобы нам не нужно было помнить о сроке сертификата и не пропустить когда он истечет, добавим крон. Он будет раз в неделю запускать команду, проверяя срок действия сертификата и перевыпускать его, если срок на исходе.
Пример крона:0 1 * * 1 /usr/bin/certbot renew
Такой крон будет запускать команду раз в неделю, в понедельник в 01:00
Выполним команду, которая добавит крон в расписание:
printf "#SSL certificate renew\n0 1 * * 1 /usr/bin/certbot renew > /dev/null 2>&1\n" >> /var/spool/cron/root && chmod 600 /var/spool/cron/root
Проверим, правильно ли добавился наш крон:
[root@waky ~]# crontab -l
#SSL certificate renew
0 1 * * 1 /usr/bin/certbot renew > /dev/null 2>&1
Все отлично — сертификат выпустили, об его обновлении позаботились.