Понадобился веб-сервер с letsencrypt сертификатами и автоматическим их продлением.
В качестве веб-сервера будем использовать nginx, автоматически продлевать сертификат будем с помощью Certbot, модуля webroot и протокола ACME.
# apt update # apt install nginx letsencrypt certbot
Для работы модуля webroot нужно создать директорию, где будут создаваться временные файлы для проверки.
Создать директорию и дать права.
# mkdir /var/www/acme # chown www-data:root /var/www/acme
Файл /etc/nginx/includes/acme с инструкцией для nginx.
location /.well-known/acme-challenge/ {
root /var/www/acme;
}
Чутка правим include nginx.conf
... #include /etc/nginx/sites-enabled/*; include /etc/nginx/sites-enabled/*.conf; ...
Генерируем ключ для работы алгоритма Диффи-Хеллмана.
openssl dhparam -dsaparam -out /etc/letsencrypt/ssl-dhparams.pem 4096
Создаем файл со спец. настройками letsencrypt для nginx - /etc/letsencrypt/options-ssl-nginx.conf
# This file contains important security parameters. If you modify this file # manually, Certbot will be unable to automatically provide future security # updates. Instead, Certbot will print and log an error message with a path to # the up-to-date file that you will need to refer to when manually updating # this file. ssl_session_cache shared:le_nginx_SSL:10m; #ssl_session_timeout 1440m; ssl_session_timeout 40m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers off; ssl_ciphers "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA";
Переписываем дефолтный vhost - /etc/nginx/sites-available/default.conf
Https секцию пока комментируем.
server {
listen 80 default;
include includes/acme;
location / { return 444; }
}
#server {
# listen 443 default;
# server_name _;
# ssl_certificate /etc/letsencrypt/live/default.site.xyz/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/default.site.xyz/privkey.pem;
# include /etc/letsencrypt/options-ssl-nginx.conf;
# ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
#
# return 444;
## return 403;
#}
Включаем дефолтный vhost.
# cd /etc/nginx/sites-enabled/ # ln -s /etc/nginx/sites-available/default.conf default.conf # systemctl restart nginx
Получаем первый сертификат.
# letsencrypt certonly -n --webroot -w /var/www/acme/ -d default.site.xyz --agree-tos --email null@site.xyz
После этого можно раcкомментировать https секцию в дефолтном vhost.
Ещё раз перезапускаем nginx.
Пишем vhost для сайта - /etc/nginx/sites-available/site_xyz.conf
server {
listen 80;
server_name site.xyz;
include includes/acme;
location / {
return 301 https://$host$request_uri;
}
}
server {
listen 443 ssl;
server_name site.xyz;
ssl_certificate /etc/letsencrypt/live/site.xyz/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site.xyz/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
location / {
proxy_pass http://127.0.0.1:81;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
# return 404;
# return 301 https://ya.ru;
}
location ~* ^/(webstat|awstats|webmail|myadmin|pgadmin|phpmyadmin) {
return 404;
}
location ~ /\.ht {
return 404;
}
}
Все.