В этой статье мы рассмотрим, как настроить бесплатный TLS/SSL сертфикат Let’s Encrypt для сайта на веб-сервере Nginx на Linux CentOS. Покажем, как выпустить сертификат для одного домена (или wildecard SSL-сертификат для всех поддоменов), настроить автопродление сертфикатов.
Выпускать сертификат Let’s Encrypt мы будем с помощью certbot. Для установка бота, нужно воспользоваться утилитой snapd , если у вас ее нет, установите ее:
# yum install snapd -y
После установки snapd, его нужно добавить, как сервис и создать симлинк для удобства запуска:
# systemctl enable --now snapd.socket
# ln -s /var/lib/snapd/snap /snap
Теперь можно установить certbot:
# sudo snap install --classic certbot
# ln -s /snap/bin/certbot /usr/bin/certbot
Чтобы выпустить SSL сертификат для сайта, запустите команду:
# certbot certonly --nginx
Утилита проверит конфигурацию nginx и выдаст все сайты на которые можно установить сертификат (утилита получает список сайтов из конфигурации nginx). В процессе бот будет запрашивать у вас данные, email, домены и тд.
В моем случае домен один и я выбрал его. Если у вас нет проблем с DNS-записями домена и веб-сервером, то SSL сертификат должен выпуститься без ошибок.
Чтобы SSL сертификат Let’s Encrypt заработал на вашем сайте, нужно использовать следующий конфигурационный файл nginx для вашего домена:
server {_x000D_ listen 443 ssl http2;_x000D_ server_name lets.build-centos.ru;_x000D_ root /var/www/lets.build-centos.ru;_x000D_ index index.php index.html index.htm;_x000D_ access_log /var/www/build-centos.info/log/ssl-access.log main;_x000D_ error_log /var/www/build-centos.info/log/ssl-error.log;_x000D_ keepalive_timeout 60;_x000D_ ssl_certificate /etc/letsencrypt/live/build-centos.info/fullchain.pem;_x000D_ ssl_certificate_key /etc/letsencrypt/live/build-centos.info/privkey.pem;_x000D_ ssl_protocols TLSv1 TLSv1.1 TLSv1.2;_x000D_ ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';_x000D_ add_header Strict-Transport-Security 'max-age=604800';_x000D_ location / {_x000D_ try_files $uri $uri/ /index.php?$args;_x000D_ }_x000D_ location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {_x000D_ access_log off;_x000D_ expires max;_x000D_ }_x000D_ location ~ .php$ {_x000D_ try_files $uri =404;_x000D_ fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;_x000D_ fastcgi_index index.php;_x000D_ fastcgi_param DOCUMENT_ROOT /var/www/lets.build-centos.ru;_x000D_ fastcgi_param SCRIPT_FILENAME /var/www/lets.build-centos.ru/$fastcgi_script_name;_x000D_ fastcgi_param PATH_TRANSLATED /var/www/lets.build-centos.ru/$fastcgi_script_name;_x000D_ include fastcgi_params;_x000D_ fastcgi_param QUERY_STRING $query_string;_x000D_ fastcgi_param REQUEST_METHOD $request_method;_x000D_ fastcgi_param CONTENT_TYPE $content_type;_x000D_ fastcgi_param CONTENT_LENGTH $content_length;_x000D_ fastcgi_param HTTPS on;_x000D_ fastcgi_intercept_errors on;_x000D_ fastcgi_ignore_client_abort off;_x000D_ fastcgi_connect_timeout 60;_x000D_ fastcgi_send_timeout 180;_x000D_ fastcgi_read_timeout 180;_x000D_ fastcgi_buffer_size 128k;_x000D_ fastcgi_buffers 4 256k;_x000D_ fastcgi_busy_buffers_size 256k;_x000D_ fastcgi_temp_file_write_size 256k;_x000D_ }_x000D_ location = /favicon.ico {_x000D_ log_not_found off;_x000D_ access_log off;_x000D_ }_x000D_ location = /robots.txt {_x000D_ allow all;_x000D_ log_not_found off;_x000D_ access_log off;_x000D_ }_x000D_ location ~ /.ht {_x000D_ deny all;_x000D_ }_x000D_ }
Сохраните конфигурационный файл. Выполняем проверку валидности настроек в конфигурационном файле nginx:
[root@server letsencrypt]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok_x000D_nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезапустите веб-сервер nginx:
# service nginx restart
Теперь, если открыть в браузере сайт по протоколу https, высвечиваться значок защищенного соединения.
Если щёлкнуть по значку сертификата, можно получить полную информацию о нем:
Чтобы выпустить wildcard сертификат Let’s Encrypt для всех поддоменов, используется другая команда. Кроме того, в DNS настройках вашего домена нужно создать специальную txt-запись. Чтобы выпустить wildcard сертификат для поддоменов, в директории /opt/letsencrypt/ запустите команду:
# certbot run -a manual -i nginx -d *.lets.build-centos.ru
После запуска команды, вам нужно будет пройти всю процедуру валидации домена, в том числе нужно будет создать специальную TXT запись в DNS.
Не нажимайте “Enter” пока не убедитесь, что запись доступна на глобальных DNS. В панели регистратора домена создайте DNS запись типа TXT с именем _acme-challenge и значением, скопированным из консоли certbot.
Дождитесь обновления информации в DNS, нажмите Enter и wildcard SSL сертификат будет успешно выпущен:
Директория хранения сертификатов и ключей в этом случае отличается от той, в который помещен сертификат для основного домена.
Проверим, работает ли сертификат на поддомене test.build-centos.ru:
Как видно из скриншота, сертификат выпущен корректно и действителен для всех поддоменов.
Сертификаты Let’s Encrypt выдаются на 90 дней, рекомендуется продлевать эти сертификаты каждые 60 дней.
Чтобы перевыпустить устаревший SSL сертификат Let’s Encrypt, используется команда:
# /certbot renew --dry-run
Если запустить команду сразу после того, как вы выпустили сертификаты, появится уведомление, что сертификат не требует перевыпуска:
Cert not yet due for renewal
Чтобы продление SSL сертификата Let’s Encrypt выполнялось автоматически, нужно добавить задание в cron :
00 00 * * 6 /certbot renew --dry-run >> /var/log/le-renew.log
15 00 * * 6 /usr/bin/systemctl reload nginx
Данный cron job будет пытаться каждую субботу продлить сертификата и выполнять мягкую перезагрузку веб-сервера nginx. Все действия по перевыпуску SSL сертификатов будут фиксироваться в лог файле /var/log/le-renew.log .
Все логи Let’s Encrypt хранятся в директории /var/log/letsencrypt .
Таким образом, мы установили бесплатный SSL сертификат Let’s Encrypt на свой web-сайт, работающий на Nginx.
Клиент удаленного рабочего стола (rdp) предоставляет нам возможность войти на сервер терминалов через консоль. Что…
В VMware Workstation есть несколько способов настройки сети гостевой машины: 1) Bridged networking 2) Network…
Встроенный брандмауэр Windows может не только остановить нежелательный трафик на вашем пороге, но и может…
Вопреки распространенному мнению, отключить IPv6 в Windows Vista и Server 2008 это не просто снять…
Параметры экранной заставки для текущего пользователя можно править из системного реестра, для чего: Запустите редактор…
В этой статье расскажу про возможность просмотра журналов событий из командной строки. Эти возможности можно…