Бесплатный SSL/TLS сертификат от Let's Encrypt

Main

Оценка: 86.94% - 17 Голосов

Общая

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 утра.

 

 

  • Просмотров: 8535
Добавить комментарий