Бесплатный SSL/TLS сертификат от Let's Encrypt
Общая
Let’s Encrypt — центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для TLS шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован.
В этой статье я расскажу как получать сертификаты для своих сайтов, работающих через Nginx reverse proxy в системе Debian 8.
Статья по своей сути универсальна для любого веб-сервера, за исключением конкретной конфигурации работы веб-сервера.
В данной статье опущена установка и настройка Nginx Reverse Proxy. Об этом написано в Nginx Reverse Proxy + Apache2
Так как процесс выдачи и обновления пакетов проходит автоматически, то нам понадобится установить некоторые пакеты в нашу систему.
Подготовка установке
Для начала нам необходимо удовлетворить зависимости для установки пакета certbot
Все необходимые пакеты находятся в Debian Backports репозитории
Отредактируем наш /etc/apt/sources.list
добавив в него:
deb http://ftp.debian.org/debian jessie-backports main
После обновим информацию о пакетах, содержащихся в репозиториях и обновим систему
apt-get update
apt-get upgrade
Устанавливаем необходимые пакеты для certbot
apt-get -t jessie-backports install python-openssl python-cryptography python-setuptools python-dnspython python-cryptography python-psutil
Устанавливаем certbot
apt-get install certbot
Подготовка Nginx reverse proxy к запросу сертификата
Основная часть настройки Nginx описана в Nginx Reverse Proxy + Apache2
В конфигурацию сервера добавляем новую локацию, расположенную на самом сервере.
Папку с именем домена, с под-папкой .well-known, необходимо создать в /var/www/
location /.well-known {
alias /var/www/ИМЯ_ДОМЕНА/.well-known;
}
location ~ /\.well-known/acme-challenge {
root /usr/share/nginx/html;
}
Проверяем настройку Nginx и если все хорошо - перезагружаем сервер.
nginx -t
service nginx restart
Получаем сертификат
Для получения сертификата необходимо запустить certbot
certbot certonly --webroot --webroot-path=/usr/share/nginx/html -d ИМЯ_ДОМЕНА_ИЛИ_ПОДДОМЕНА -d ИМЯ_ДОМЕНА_ИЛИ_ПОДДОМЕНА
В процессе получения вас попросят ввести E-mail для связи.
Если все хорошо certbot отчитается об удачном завершении операции, а в /etc/letsencrypt/live/ИМЯ_ДОМЕНА/
появятся сертификаты.
Настройка Nginx на работу с сертификатом.
В имеющуюся конфигурацию, взятой из Nginx Reverse Proxy + Apache2 добавляем:
listen ИМЯ_ДОМЕНА:443 ssl;
ssl on;
ssl_certificate /etc/letsencrypt/live/ИМЯ_ДОМЕНА/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ИМЯ_ДОМЕНА/privkey.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES:HIGH:!ADH:!MDF;
ssl_prefer_server_ciphers on;
ssl_stapling on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
ssl_stapling_verify on;
В раздел location / {
добавляем:
proxy_ssl_session_reuse off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;
Если есть желание перевести сайт только на HTTPS то из конфигурации необходимо убрать строку
listen ИМЯ_ДОМЕНА;
А так же необходимо добавить в конце конфигурации редирект:
server {
listen ИМЯ_ДОМЕНА;
server_name "ИМЯ_ДОМЕНА";
return 301 https://$host$request_uri;
}
Проверяем настройку Nginx и если все хорошо - перезагружаем сервер.
nginx -t
service nginx restart
Окончательная конфигурация сервера с работой через HTTP и HTTPS выглядит так:
server {
listen ИМЯ_ДОМЕНА;
listen ИМЯ_ДОМЕНА:443 ssl;
server_name ИМЯ_ДОМЕНА;
server_tokens off;
ssl on;
ssl_certificate /etc/letsencrypt/live/ИМЯ_ДОМЕНА/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/ИМЯ_ДОМЕНА/privkey.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers AES:HIGH:!ADH:!MDF;
ssl_prefer_server_ciphers on;
ssl_stapling on;
resolver 8.8.4.4 8.8.8.8 valid=300s;
ssl_stapling_verify on;
location / {
proxy_redirect off;
proxy_buffering off;
proxy_ssl_session_reuse off;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-Proto $scheme;
add_header Front-End-Https on;
proxy_pass http://АДРЕС_СЕРВЕРА;
}
location /.well-known {
alias /var/www/ИМЯ_ДОМЕНА/.well-known;
allow all;
}
location ~ /\.well-known/acme-challenge {
root /usr/share/nginx/html;
}
Автоматическое обновление сертификата
Так как сертификат выдаётся на 3 месяца то необходимо автоматизировать его обновление. Реализовать это поможет crontab.
Выполним команду
crontab -e
В открывшийся файл внесем
30 6 * * * /usr/bin/certbot renew --quiet --renew-hook "service nginx reload"
Данная строка поможет выполнять проверку и обновление сертификата при необходимости, а так же перезапускать Nginx каждый день в 6.30 утра.
- Просмотров: 9379