Let’s Encrypt – это некоммерческий центр сертификации, управляемый Исследовательской группой по безопасности в Интернете (ISRG), который предоставляет сертификаты X.509 для шифрования транспортного уровня (TLS) бесплатно. 

Сертификат действителен в течение 90 дней, в течение которых продление может иметь место в любое время. Предложение сопровождается автоматизированным процессом, предназначенным для преодоления ручного создания, проверки, подписания, установки и обновления сертификатов для защищенных веб-сайтов. Он был запущен 12 апреля 2016 года.

В этой статье мы покажем вам, как вы можете установить Let’s Encrypt сертификат для веб-сервера Nginx и настроить автоматическое обновление сертификата в CentOS 8.

Установка Nginx

Nginx доступен в репозиториях CentOS по умолчанию.

# dnf install nginx

Включите и запустите службу Nginx.

# systemctl enable nginx
# systemctl start nginx

Создание виртуального Хоста

По умолчанию Nginx настроен на загрузку всех файлов конфигурации, заканчивающихся на .conf, из каталога /etc/nginx/conf.d/

# nano /etc/nginx/conf.d/example.com.conf

server {
listen 80;
server_name example.com www.example.com;
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
server_name example.com www.example.com;
root /home/example.com;
index index.php index.html index.htm;

access_log /var/log/nginx/example.com.access.log;
error_log /var/log/nginx/example.com.error.log;

location ~ \.(php|phar)(/.*)?$ {
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;

fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-fpm;
}

Установка Certbot

Certbot — это бесплатный инструмент командной строки, который упрощает процесс получения и обновления SSL-сертификатов Let Encrypt и автоматического включения HTTPS на вашем сервере.

# wget https://dl.eff.org/certbot-auto
# mv certbot-auto /usr/local/bin/certbot-auto
# chmod 0755 /usr/local/bin/certbot-auto

Установка Lets Encrypt сертификата

# /usr/local/bin/certbot-auto --nginx

Creating virtual environment...
Installing Python packages...
Installation succeeded.
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): [email protected]
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v02.api.letsencrypt.org/directory
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A)gree/(C)ancel: a
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Would you be willing 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: y
Which names would you like to activate HTTPS for?
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: example.com
2: www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate numbers separated by commas and/or spaces, or leave input
blank to select all options shown (Enter 'c' to cancel):
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for example.com
http-01 challenge for www.example.com
Waiting for verification...
Cleaning up challenges
Deploying Certificate to VirtualHost /etc/nginx/conf.d/example.com.conf
Deploying Certificate to VirtualHost /etc/nginx/conf.d/example.com.conf

Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: No redirect - Make no further changes to the webserver configuration.
2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for
new sites, or if you're confident your site works on HTTPS. You can undo this
change by editing your web server's configuration.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Select the appropriate number [1-2] then [enter] (press 'c' to cancel): 1
Future versions of Certbot will automatically configure the webserver so that all requests redirect to secure HTTPS access. You can control this behavior and disable this warning with the --redirect and --no-redirect flags.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Congratulations! You have successfully enabled https://example.com and
https://www.example.com
You should test your configuration at:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
https://www.ssllabs.com/ssltest/analyze.html?d=www.example.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
  /etc/letsencrypt/live/example.com/fullchain.pem
  Your key file has been saved at:
  /etc/letsencrypt/live/example.com/privkey.pem
  Your cert will expire on 2020-05-27. To obtain a new or tweaked
  version of this certificate in the future, simply run certbot-auto
  again with the "certonly" option. To non-interactively renew *all*
  of your certificates, run "certbot-auto renew"
- Your account credentials have been saved in your Certbot
  configuration directory at /etc/letsencrypt. You should make a
  secure backup of this folder now. This configuration directory will
  also contain certificates and private keys obtained by Certbot so
  making regular backups of this folder is ideal.
- 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
- We were unable to subscribe you the EFF mailing list because your
  e-mail address appears to be invalid. You can try again later by
  visiting https://act.eff.org.

Проверка Let’s Encrypt SSL сертификата

Проверьте свой сертификат SSL на наличие проблем и его рейтинги безопасности, перейдя по указанному ниже URL-адресу. 
https://www.ssllabs.com/ssltest

https://www.sslshopper.com/ssl-checker.html

Обновление Let’s Encrypt сертификата

Сертификат Let Encrypt действителен в течение 90 дней с даты выдачи и должен быть продлен до истечения срока его действия.

Выполните следующую команду, чтобы создать новый cronjob, который обновит сертификат и перезапустит Nginx.

# echo "0 0,12 * * * root python3 -c 'import random; import time; time.sleep(random.random() * 3600)' && /usr/local/bin/certbot-auto -q renew --renew-hook \"systemctl reload nginx\"" | sudo tee -a /etc/crontab > /dev/null

Вы также можете смоделировать процесс продления сертификата с помощью приведенной ниже команды.

# /usr/local/bin/certbot-auto renew --dry-run

В этом руководстве мы продемонстрировали, как вы можете использовать certbot для установки и настройки сертификата Let’s Encrypt на веб-сервере Nginx, работающем в системе CentOS 8.