У цій статті ми розглянемо, як налаштувати безкоштовний TLS / SSL СЕРТФІКАТА Let’s Encrypt для сайту на веб-сервері Nginx на Linux CentOS. Покажемо, як випустити сертифікат для одного домену (або wildecard SSL-сертифікат для всіх піддоменів), налаштувати конфігурацію Nginx, автоподовження СЕРТФІКАТА.

Установка клієнта Let’s Encrypt в Linux, випуск SSL СЕРТФІКАТА

Актуальну версію клієнта Let’s Encrypt ми отримаємо з Git. для

розгортання проекту знадобиться встановити додаткові утиліти:

# yum install git bc -y

установка git і bc

Тепер можна клонувати проект Давайте зашифруємо з GitHub:

# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

копії проекту letsencrypt через git

Копія проекту буде розміщена в директорію / opt / letsencrypt. Щоб випустити сертифікат за допомогою плагіна webroot, потрібно перейти в директорію з проектом і запустити програму letsencrypt-auto:

# cd /opt/letsencrypt
# ./letsencrypt-auto certonly -a webroot --webroot-path=/var/www/build-centos.info -d build-centos.info -d www.build-centos.info

У значенні —Шляховик потрібно вказати кореневу директорію вашого сайту (не забудьте змінити ім’я домену).

В процесі скрипт буде запитувати у вас дані, email, ім’я сервера і тд.

letsencrypt-auto certonly випустити ssl СЕРТФІКАТА

Якщо у вас немає проблем з DNS-записами домену та веб-сервером, то SSL сертифікат повинен випустити без помилок.

лог випуску СЕРТФІКАТА letsencrypt

PS На моєму сервері використовується зв’язка nginx + apache і сертифікат для веб-сайту, встановлюється на nginx. При випуску сертифіката виникала така помилка:

IMPORTANT NOTES:
- The following errors were reported by the server:
Domain: build-centos.info
Type: unauthorized
Detail: Invalid response from
_http://build-centos.info/.well-known/acme-challenge/wVaN_fB6Ih3sg_bRa-zaRDjCB4HH71CzbJ_fTrrVGzc
[*.*.*.*]: "<html>rn<head><title>404 Not
Found</title></head>rn<body>rn<center><h1>404 Not
Found</h1></center>rn<hr><center>nginx/1.16.1</ce"

Вирішилося це, додаванням в конфігураційний файл nginx для мого домену, вказаного нижче рядка:

location ^~ /.well-known/acme-challenge/ {
  access_log off;
  log_not_found off;
  root /var/www/build-centos.info/;
  autoindex off;
  index index.html;
  try_files $uri $uri/ =404;
}

Після випуску сертифіката, файл сертифіката та закритий ключ зберігаються в директорії /etc/letsencrypt/live/build-centos.info/.

Встановіть сертифікат Let’s Encrypt SSL на веб-сайті Nginx

Щоб SSL сертифікат Let’s Encrypt заробив на вашому сайті, потрібно використовувати наступний конфігураційний файл nginx для вашого домену:

server {
  listen 443 ssl http2;
  server_name build-centos.info;
  root /var/www/build-centos.info;
  index index.php index.html index.htm;
  access_log /var/www/build-centos.info/log/ssl-access.log main;
  error_log /var/www/build-centos.info/log/ssl-error.log;
  keepalive_timeout 60;
  ssl_certificate /etc/letsencrypt/live/build-centos.info/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/build-centos.info/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  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';
  add_header Strict-Transport-Security 'max-age=604800';
  location / {
    try_files $uri $uri/ /index.php?$args;
  }
  location ~* ^.+.(js|css|png|jpg|jpeg|gif|ico|woff)$ {
    access_log off;
    expires max;
  }
  location ~ .php$ {
  try_files $uri =404;
  fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
  fastcgi_index index.php;
  fastcgi_param DOCUMENT_ROOT /var/www/build-centos.info;
  fastcgi_param SCRIPT_FILENAME /var/www/build-centos.info/$fastcgi_script_name;
  fastcgi_param PATH_TRANSLATED /var/www/build-centos.info/$fastcgi_script_name;
  include fastcgi_params;
  fastcgi_param QUERY_STRING $query_string;
  fastcgi_param REQUEST_METHOD $request_method;
  fastcgi_param CONTENT_TYPE $content_type;
  fastcgi_param CONTENT_LENGTH $content_length;
  fastcgi_param HTTPS on;
  fastcgi_intercept_errors on;
  fastcgi_ignore_client_abort off;
  fastcgi_connect_timeout 60;
  fastcgi_send_timeout 180;
  fastcgi_read_timeout 180;
  fastcgi_buffer_size 128k;
  fastcgi_buffers 4 256k;
  fastcgi_busy_buffers_size 256k;
  fastcgi_temp_file_write_size 256k;
  }
    location = /favicon.ico {
    log_not_found off;
    access_log off;
  }
  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }
  location ~ /.ht {
    deny all;
  }
}

Збережіть конфігураційний файл. Виконуємо перевірку валідності налаштувань в файлі конфігурації nginx:

[root@server letsencrypt]# nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Перезапустіть веб-сервер nginx:

# service nginx restart

Тепер, якщо відкрити в браузері сайт по протоколу https, Висвітлюватися значок захищеного з’єднання.

Якщо клацнути по значку сертифікату, можна отримати повну інформацію про нього:

tls СЕРТФІКАТА lets encrypt для сайту на nginx

Для навантажених PHP сайтів на Nginx можна використовуватися зв’язку з php-fpm.

Безкоштовні Wildcard SSL сертифікати Let’s Encrypt для піддоменів

щоб випустити підстановочний знак сертифікат Let’s Encrypt для всіх піддоменів, використовується інша команда. Крім того, в DNS налаштуваннях вашого домену потрібно створити спеціальну txt-запис. Щоб випустити wildcard сертифікат для піддоменів, в директорії / opt / letsencrypt / запустіть команду:

# ./letsencrypt-auto certonly -d *.build-centos.info -m admin@build-centos.info –server https://acme-v02.api.letsencrypt.org/directory --manual

Після запуску команди, вам потрібно буде пройти всю процедуру валідації домену, в тому числі потрібно буде створити спеціальну TXT запис в DNS.

letsencrypt-auto certonly СЕРТФІКАТА для піддоменів Не натискайте “Enter” поки не переконаєтеся, що запис доступна на глобальних DNS. В панелі реєстратора домену створіть DNS запис типу TXT з ім’ям _acme-виклик і значенням, скопійованих з консолі certbot.

txt запис _acme-challenge для випуску сертифіката для всіх піддоменів

Дочекайтеся оновлення інформації в DNS, натисніть Enter і wildcard SSL сертифікат буде успішно випущений:

ssl сертификат _acme-challenge

Директорія зберігання сертифікатів та ключів в цьому випадку відрізняється від тієї, в який поміщений сертифікат для основного домену.

Перевіримо, чи працює сертифікат на піддомені test.build-centos.info:

узагальнюючий знак сертфікат дозволяє шифрувати

Як видно з скріншоту, сертифікат випущений коректно і дійсний для всіх піддоменів.

Продовження сертифікатів Let’s Encrypt

Сертифікати Let’s Encrypt видаються на 90 днів, рекомендується продовжувати ці сертифікати кожні 60 днів.

Щоб перевипустити застарілий SSL сертифікат Let’s Encrypt, використовується команда:

# /opt/letsencrypt/letsencrypt-auto renew

Запускається вона так само з директорії / opt / letsencrypt.

Якщо запустити команду відразу після того, як ви випустили сертифікати, з’явиться повідомлення, що сертифікат не вимагає перевипуску:

оновлення СЕРТФІКАТА let's ecncrypt

Щоб продовження SSL сертифікату Let’s Encrypt виконувалося автоматично, потрібно додати завдання в cron:

00 00 * * 6 /opt/letsencrypt/letsencrypt-auto renew >> /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.

Не забувайте, що можна і потрібно оновлювати сам проект Let’s Encrypt. Туди додаються всі оновлення від розробників проекту:

# cd /opt/letsencrypt
# git pull

Таким чином, ми встановили безкоштовний SSL сертифікат Let’s Encrypt на свій web-сайт, що працює на Nginx.

Leave a Reply

Your email address will not be published. Required fields are marked *