Як отримати справжній SSL-сертифікат для свого сайту безкоштовно

Поширте інформацію:

На моєму блозі є пост про встановлення самопідписаного SSL-сертифіката на веб-сервер під керуванням nginx. Як там вже сказано, самопідписаний сертифікат забезпечує шифрування даних між сервером та клієнтом, але не дозволяє засвідчити справжність веб-сайту.

Для засвідчення справжності необхідні ключ та сертифікат, випущені всесвітньо відомими центрами сертифікації. І ви можете безкоштовно отримати справжній SSL-сертифікат від центру сертифікації Let’s Encrypt!

Вважаємо, що веб-сервер nginx вже встановлений і налаштований.

Крок 1. Встановлюємо клієнт від Let’s Enscrypt

$ cd /usr/local/sbin
$ sudo wget https://dl.eff.org/certbot-auto
$ sudo chmod a+x /usr/local/sbin/certbot-auto

Крок 2. Отримання сертифікату

Let’s encrypt пропонує різні способи отримання сертифікатів, за допомогою різних плаґінів. Ми використаємо плаґін Webroot. Цей плаґін розміщує спеціальний файл в каталозі .well-known/ у веб-корені вашого сайту. Тому потрібно, щоб розташування сайту /.well-known/ було доступним з інтернету.

$ certbot-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d site-devel.info -d www.site-devel.info

Замініть /usr/share/nginx/html на каталог-корінь вашого сайту, а site-devel.info – ваш домен.

Під час виконання скрипта потрібно буде ввести Email для зв’язку та букву A для погодження з умовами.

Примітки

  • Скрипт certbot-auto виконує певні операції під sudo, тому потрібно буде ввести пароль під час його виконання.

  • Помилка виду Failed to connect to host for DVSNI challenge може свідчити про те, що файрвол сервера забороняє з’єднання на порт 80 або 443

  • Якщо ви використовуєте службу DNS-маршртизації на кшталт Cloud Flare, тимчасово відключіть її.

Файли сертифікату

Після успішного виконання скрипта ви отримаєте такі файли:

  • cert.pem сертифікат вашого домена

  • chain.pem сертифікат ланцюжка верифікації Let’s encrypt

  • fullchain.pem об’єднані сертифікати cert.pem та chain.pem

  • privkey.pem приватний ключ вашого сертифікату

Ці файли будуть розміщені в /etc/letsencrypt/archive. Крім того, certbot створює символічне посилання на найсвіжішу версію сертифікату в /etc/letsencrypt/live/site-devel.info (де site-devel.info – ваш домен).

$ sudo ls -l /etc/letsencrypt/live/site-devel.info

Саме це посилання ми будемо використвувати для конфігурації nginx.

Генерація сильної групи Діффі-Гелмана

Для кращої безпеки згенеруємо ще сильну групу Діффі-Гелмана:

$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048

Крок 3. Налаштування веб-сервера nginx

Вносимо зміни у файл конфігурації сервера (чи віртуального сервера) в блоці server {.

$ sudo vim /etc/nginx/sites-enabled/site-devel.info

Вилучаємо чи коментуємо директиви, що вказують слухати порт 80, типу

listen 80; # це вилучити

Замість них додаємо рядки

listen 443;

server_name site-devel.info www.site-devel.info;

ssl on;
ssl_certificate /etc/letsencrypt/live/site-devel.info/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/site-devel.info/privkey.pem;

Така конфігурація вмикає використання SSL і вказує серверу використовувати сертифікати від Let’s Encrypt.

Щоб використовувати лише найбезпечніші протоколи та шифри і сильну групу Діффі-Гелмана додаємо ще такі рядки

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
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';
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;

Накінець додаємо ще один серверний блок, який буде перенаправляти з’єднання HTTP (порт 80) на HTTPS (порт 443).

server {
    listen 80;
    server_name site-devel.info www.site-devel.info;
    return 301 https://$host$request_uri;
}

Зберігаємо файл, перевіряємо конфігурацію

$ sudo nginx -t

Перезапускаємо сервер

$ sudo service nginx restart

Тепер на нашому сайті працює SSL-сертифікат. Можемо перевірити за допомогою Qualys SSL Labs:

в браузері
https://www.ssllabs.com/ssltest/analyze.html?d=site-devel.info

З такими налаштуваннями, як показано вище, звіт має показати рейтинг A+.

Крок 4. Налаштування автооновлення сертифікату.

Сертифікати від Let’s Encrypt діють 90 днів. Рекомендується запускати їх оновлення через 60 днів. Для того, щоб виконати оновлення сертифікатів для всіх налаштованих доменів, треба віддати команду:

$ certbot-auto renew

Щоб не робити це вручну, можна використати cron

$ sudo crontab -e

30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload

Таким чином, кожного понеділка о 02:30 буде запускатися оновлення сертифікатів, а через 5 хв буде перезавантажуватися конфігурація nginx.

Написано за матеріалами посібника на Digital Ocean

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *

Цей сайт використовує Akismet для зменшення спаму. Дізнайтеся, як обробляються ваші дані коментарів.