Вступ
Let's Encrypt - це новий центр сертифікації (CA), який забезпечує простий спосіб отримання і встановлення безкоштовних TLS / SSL сертифікатів, дозволяючи таким чином зашифровані HTTPS на веб-серверах. Це спрощує процес, надаючи клієнтське програмне забезпечення, letsencrypt, яке намагається автоматизувати більшість (якщо не всі) з необхідних кроків. В даний час, так як Let's Encrypt все ще знаходиться у відкритій бета-версії, весь процес отримання та встановлення продукта повністю автоматизований тільки на веб-серверах Apache. Проте, Let's Encrypt можна використовувати, щоб легко отримати безкоштовний SSL сертифікат, який може бути встановлений вручну, незалежно від вашого вибору програмного забезпечення веб-сервера.
У цьому уроці ми покажемо вам, як використовувати Let's Encrypt, щоб отримати безкоштовний SSL сертифікат і використовувати його з Nginx на CentOS 7. Ми також покажемо вам, як автоматично продовжувати SSL сертифікат. Якщо ви використовуєте інший веб-сервер, необхідно лише дотримуватися документації вашого веб-сервера, щоб дізнатися, як використовувати сертифікат з вашим встановленням.
Вимоги
Перед виконанням даного керівництва, вам знадобиться кілька речей.
Ви повинні мати CentOS 7 сервер зі звичайним обліковим записом, що має sudo привілеї. Ви можете дізнатися, як налаштувати обліковий запис користувача, виконавши кроки 1-3 в нашому початковому налаштуванні сервера для CentOS 7 керівництва.
Ви повинні володіти або контролювати зареєстроване доменне ім'я, для якого хочете використовувати сертифікат. Якщо у вас ще немає зареєстрованого доменного імені, ви можете зареєструвати домен з одним з багатьох реєстраторів доменних імен (наприклад, Namecheap, GoDaddy і т.д.).
Якщо ви все ще це не зробили, не забудьте створити А запис, яка направляє ваш домен до IP-адресою вашого сервера. Це необхідно, тому що Let's Encrypt перевіряє, що ви є власником домену для якого видає сертифікат. Наприклад, якщо ви хочете отримати сертифікат для example.com, цей домен повинен працювати з вашого сервера для перевірки процесу роботи. Наша встановлення буде використовувати example.com і www.example.com в якості доменних імен, так як потрібні обидві DNS-записи.
Якщо ви відповідаєте всім вимогам давайте перейдемо до встановлення Let's Encrypt client.
Крок 1. Встановлення Let's Encrypt клієнта
Перший крок до використання Let's Encrypt - це отримання SSL сертифікату, щоб встановити програмне забезпечення letsencrypt на сервері. В даний час, найкращий спосіб установки Let's Encrypt - це просто клонувати його з офіційного репозиторію GitHub. У майбутньому, швидше за все він буде доступний через менеджер пакетів.
Встановлення Git і bc
Давайте зараз встановимо Git, щоб ми могли скопіювати репозиторій Let's Encrypt.
Встановлення git і bc пакетів з yum:
$ sudo yum -y install git bc
Встановивши git і bc, ми зможемо легко завантажити letsencrypt, копіюючи репозиторій з GitHub.
Копіювання Let's Encrypt
Тепер ми можемо скопіювати репозиторій Let's Encrypt в / opt наступною командою:
$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
Тепер ви повинні мати копію сховища letsencrypt в каталозі /opt/letsencrypt.
Крок 2. Придбання сертифікатау
Let's Encrypt надає безліч способів отримати SSL сертифікати, за допомогою різних плагінів. На відміну від плагіна Apache, який описаний в іншому керівництві, більшість полігонів тільки допоможуть вам отримати сертифікат, який необхідно вручну налаштувати для використання на вашому веб-сервері. Модулі, які тільки набувають сертифікати, але не встановлюють їх, згадуються як "аутентифікатор", так як вони використовуються для перевірки справжності - чи буде сертифікат виданий на сервер.
Ми покажемо вам, як використовувати плагін Webroot, щоб отримати SSL сертифікат.
Як використовувати плагін Webroot
Плагін Webroot працює, поміщаючи спеціальний файл в каталог /.well-known в межах кореневого каталогу, який може бути відкритий (через веб-сервер) службою перевірки Let's Encrypt. Залежно від конфігурації, вам може знадобитися дозволити доступ до каталогу /.well-known.
Якщо ви ще не встановили Nginx, спочатку встановіть репозиторій epel-release:
$ sudo yum -y install epel-release
Далі встановіть Nginx за допомогою наступної команди:
$ sudo yum -y install nginx
Для того, щоб переконатися, що каталог доступний для перевірки Let's Encrypt, давайте зробимо швидкі зміни в вашому блоці сервера Nginx за замовчуванням. Файл конфігурації Nginx за замовчуванням дозволяє легко додавати директиви до блоку сервера порт 80 шляхом додавання файлів в каталозі /etc/nginx/default.d. Якщо ви використовуєте конфігурацію за замовчуванням, створіть новий файл з ім'ям le-well-known.conf і відкрийте його для редагування за допомогою наступної команди:
$ sudo vi /etc/nginx/default.d/le-well-known.conf
Потім вставте ці рядки:
location ~ /.well-known {
allow all;
}
Збережіть і вийдіть.
Запустіть Nginx за допомогою цієї команди:
$ sudo systemctl restart nginx
Якщо ви не використовуєте блок сервера за замовчуванням, вам потрібно буде подивитися, що ваш кореневий документ встановлено - шляхом пошуку кореневої директиви в вашому блоці сервера Nginx за замовчуванням. Це рівень, який вимагає Let's Encrypt, як webroot-path, при використанні плагіна Webroot. Корінь за замовчуванням /usr/share/nginx/html.
Тепер, коли ми знаємо наш webroot-path, ми можемо використовувати плагін Webroot, щоб запросити SSL сертифікат з цими командами. Тут ми також вказуємо свої доменні імена з опцією -d. Якщо ви хочете один сертифікат для роботи з декількома доменними іменами (наприклад, example.com і www.example.com), не забудьте всі їх додати. Крім того, переконайтеся, що ви замінюєте виділені частини відповідним шляхом webroot і доменними іменами:
$ cd /opt/letsencrypt
$ ./letsencrypt-auto certonly -a webroot --webroot-path=/usr/share/nginx/html -d example.com -d www.example.com
Примітка: Програмне забезпечення Let's Encrypt вимагає привілеїв суперкористувача, так що вам буде необхідно ввести свій пароль, якщо останнім часом ви не використали sudo.
Після того, як letsencrypt встановиться, Вам буде запропоновано ввести деяку інформацію. Точні запити можуть варіюватися в залежності від того, чи використовували ви Let's Encrypt раніше, але ми покажемо вам приклад для першого разу.
У командному рядку введіть адресу електронної пошти, яка буде використовуватися для повідомлень і відновлення втрачених ключів:
Далі ви повинні погодиться з Договором Передплатника. Натисніть Agree:
Якщо все пройшло успішно, ви повинні побачити висновок повідомлення, яке виглядає приблизно так:
Output:
IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to [email protected]
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/example.com/fullchain.pem. Your
cert will expire on 2016-03-15. To obtain a new version of the
certificate in the future, simply run Let's Encrypt again.
- Your account credentials have been saved in your Let's Encrypt
configuration directory at /etc/letsencrypt. You should make a
secure backup of this folder now. This configuration directory will
also contain certificates and private keys obtained by Let's
Encrypt so making regular backups of this folder is ideal.
- If like Let's Encrypt, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
Ви захочете відзначити шлях і дату закінчення терміну дії вашого сертифіката, які були виділені в прикладі виведення.
Примітка Firewall: Якщо ви отримуєте повідомлення про помилку типу Помилка з'єднання із хосту для DVSNI задачі, firewall вашого сервера може знадобитися налаштувати так, щоб дозволити TCP трафік через порти 80 і 443.
Примітка: Якщо ваш домен спрямований через службу DNS, таку як CloudFlare, вам потрібно буде тимчасово відключити її, поки ви не отримали сертифікат.
Файли сертифіката
Після придбання сертифіката, ви будете мати такі файли в PEM-кодуванні:
- cert.pem: Сертифікат вашого домену
- chain.pem: Ланцюжок Let's Encrypt сертифікатів
- fullchain.pem: Скомбіновані cert.pem і chain.pem
- privkey.pem: Закритий ключ вашого сертифікату
Важливо, щоб ви знали про місцезнаходження файлів сертифіката, які тільки що були створені, так як ви можете використовувати їх в конфігурації веб-сервера. Самі файли поміщаються в підкаталог /etc/letsencrypt/archive.Тим не менше, Let's Encrypt створює символічні посилання на найостанніші файли сертифікатів в каталозі /etc/letsencrypt/live/your_domain_name.Оскільки посилання завжди будуть вказувати на найостанніші файли сертифікатів, то це той шлях, який ви повинні використовувати, щоб отримати доступ до файлів сертифікатів.
Ви можете перевірити, чи існують файли, виконавши цю команду (заміна в доменному імені):
$ sudo ls -l /etc/letsencrypt/live/your_domain_name
Висновком повинні бути чотири згадані вище файли сертифікатів. В даний момент, ви будете налаштовувати веб-сервер, щоб використовувати fullchain.pem як файл сертифіката та privkey.pem як файл ключа сертифіката.
Генеруємо сильні групи Діффі-Хеллмана
З метою подальшого підвищення рівня безпеки, ви повинні також сформувати сильну групу Діффі-Хеллмана. Щоб згенерувати 2048-бітний групу, використовуйте наступну команду:
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Це може зайняти кілька хвилин, але коли буде зроблено ви будете мати сильну групу DH в /etc/ssl/certs/dhparam.pem.
Крок 3. Налаштування TLS/SSL на веб-сервері (Nginx)
Тепер ви повинні змінити конфігурацію Nginx, щоб використовувати файли сертифікатів Let's Encrypt. Конфігурація Nginx за замовчуванням на CentOS досить відкритого складу, але ми створимо новий блок сервера, який використовує SSL / TLS і прослуховує порт 443. Потім ми налаштуємо блок сервера за замовчуванням (HTTP на 80 порту) для перенаправлення блока сервера з підтримкою HTTPS.
За замовчуванням додаткова конфігурація блоку сервера може бути розміщена в/etc/nginx/conf.d. Створіть новий файл з ім'ям ssl.conf і відкрийте його для редагування за допомогою наступної команди:
$ sudo vi /etc/nginx/conf.d/ssl.conf
Потім вставте цю в конфігурацію. Не забувайте замінювати кожен екземпляр example.com (всі чотири) вашим власним доменним ім'ям:
server {
listen 443 ssl;
server_name example.comwww.example.com;
ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
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;
location ~ /.well-known {
allow all;
}
# The rest of your server block
root /usr/share/nginx/html;
index index.html index.htm;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
}
Збережіть і вийдіть. Це налаштує Nginx для використання SSL, і вкаже йому використовувати Let's Encrypt SSL сертифікат, отриманий нами раніше. Крім того, зазначені тут SSL параметри гарантують, що будуть використовуватися тільки найбезпечніші протоколи і шифри. Зверніть увагу, що цей приклад конфігурації просто служить сторінка Nginx за замовчуванням, так що ви можете змінити його, щоб задовольнити ваші потреби.
Файл конфігурації Nginx за замовчуванням дозволяє легко додавати директиви до блоку сервера порт 80 шляхом додавання файлів в каталозі /etc/nginx/default.d. Створіть новий файл з ім'ям ssl-redirect.conf і відкрийте його для редагування за допомогою наступної команди:
$ sudo vi /etc/nginx/default.d/ssl-redirect.conf
Далі вставте наступний рядок:
return 301 https://$host$request_uri;
Збережіть і вийдіть. Це налаштує HTTP в блоці сервера порт 80 (за замовчуванням) для перенаправлення вхідних запитів на HTTPS.
Тепер перезавантажте Nginx:
$ sudo systemctl reload nginx
Ви також захочете ввімкнути Nginx, щоб він стартував при завантаженні сервера:
$ sudo systemctl enable nginx
Сертифікат Let's Encrypt TLS / SSL тепер на місці. На даному етапі ви повинні перевірити, що TLS / SSL-сертифікат працює, відвідавши ваш домен через HTTPS в веб-браузері.
Ви можете використовувати звіт Qualys SSL Labs, щоб побачити оцінки конфігурації вашого сервера:
В веб-браузері:
https://www.ssllabs.com/ssltest/analyze.html?d=example.com
Це встановлення SSL повинне видавати рейтинг A +.
Крок 4. Налаштування автоподовження
Сертифікат Let's Encrypt дійсний 90 днів, але рекомендується продовжувати термін дії сертифікатів кожні 60 днів, щоб забезпечити межа похибки. На момент написання цієї статті, автоматичне оновлення до сих пір не є як особливість самого клієнта, але ви можете вручну оновити свої сертифікати, запустивши клієнт Let's Encrypt з опцією renew.
Щоб запустити процес оновлення для всіх встановлених доменів, виконайте наступну команду:
$ /opt/letsencrypt/letsencrypt-auto renew
Так як ми недавно встановили сертифікат, то команда буде перевіряти тільки дату закінчення терміну дії та видасть повідомлення, що повідомляє про те, що сертифікат ще продовжувати не треба. Результат повинен виглядати приблизно так:
Output:
Checking for new version...
Requesting root privileges to run letsencrypt...
/root/.local/share/letsencrypt/bin/letsencrypt renew
Processing /etc/letsencrypt/renewal/example.com.conf
The following certs are not due for renewal yet:
/etc/letsencrypt/live/example.com/fullchain.pem (skipped)
No renewals were attempted.
Зверніть увагу, що якщо ви створили сертифікат в комплекті з кількома доменами, тільки базове ім'я домену буде показано на виході, але оновлення має бути дійсним для всіх доменів, включених в цей сертифікат.
Практичний спосіб переконатися, що ваші сертифікати не будуть застарівати - це створити cron задачу, яка буде періодично виконувати автоматичну команду продовження для вас. Оскільки оновлення спочатку перевіряє на дату закінчення терміну дії та тільки виконує оновлення сертифіката менш ніж за 30 днів від закінчення терміну дії, безпечно створити cron задачу, яка працює щотижня або навіть щодня, наприклад.
Давайте відредагуємо crontab, щоб створити нове завдання, яка буде виконувати команду оновлення щотижня. Для редагування crontab для кореневого користувача, виконайте наступну команду:
$ sudo crontab -e
Додайте наступні рядки:
30 2 * * 1 /opt/letsencrypt/letsencrypt-auto renew >> /var/log/le-renew.log
35 2 * * 1 /etc/init.d/nginx reload
Збережіть і вийдіть. Це створить нову cron задачу, яка буде виконувати letsencrypt-auto renew команду щопонеділка о 2:30 ранку, і перезавантажувати Nginx о 2:35 ранку (тому оновлений сертифікат буде використовуватися). Висновок, що генерується командою буде надходити в лог-файл, розташований в /var/log/le-renewal.log.
Крок 5. Оновлення Let’s Encrypt клієнта (не обов'язково)
Кожен раз, коли будуть доступні нові оновлення для клієнта, ви можете оновити локальну копію, запустивши git pull зсередини каталогу Let's Encrypt:
$ cd /opt/letsencrypt
$ sudo git pull
Це дозволить завантажити всі останні зміни в сховище, оновивши ваш клієнт.
Висновок
На цьому все! Ваш веб-сервер тепер використовує безкоштовний Let's Encrypt TLS / SSL сертифікат для безпечного обслуговування контенту по протоколу HTTPS.