Вступ

Let's Encrypt - це новий центр сертифікації, який легко дозволяє отримати і встановити безкоштовний TLS / SSL сертифікат, забезпечуючи тим самим, шифрування HTTPS на веб-серверах. Безумовно, цей процес спрощується за допомогою такого програмного забезпечення як Let's Encrypt client, який намагається автоматизувати більшість (а то і все) необхідні дії. У зв'язку з тим, що на даний момент Let's Encrypt все ще перебуває в стадії розробки, весь процес отримання та встановлення продукта повністю автоматизований тільки на веб-серверах Apache. Не дивлячись на це, Let's Encrypt можна використовувати для того, щоб легко отримати безкоштовний SSL сертифікат, який, незалежно від вибору програмного забезпечення веб-сервера, можна встановити вручну.

У цьому уроці ми покажемо вам, як використовувати Let's Encrypt для того, щоб отримати безкоштовний SSL сертифікат і використовувати його з Nginx на Ubuntu 14.04. Також ми покажемо вам, як автоматично продовжувати SSL сертифікат. Якщо ви використовуєте інший веб-сервер, необхідно лише дотримуватися документації вашого веб-сервера, щоб дізнатися, як використовувати сертифікат з вашої установкою.

 

 

Nginx with Let's Encrypt TLS/SSL Certificate and Auto-renewal


Вимоги

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

Вам буде потрібно сервер на Ubuntu 14.04. зі звичайною обліковим записом і привілеями (sudo). Як налаштувати таку обліковий запис, ви можете дізнатися виконавши кроки 1-3 в нашому уроці по налаштуванню сервера для Ubuntu 14.04.

Ви повинні володіти або мати доступ до управління зареєстрованим доменним ім'ям, для якого хочете використовувати сертифікат. Якщо ж у вас все ще немає зареєстрованого домену, ви можете зареєструвати його з одним з багатьох реєстраторів доменних імен (наприклад, Namecheap, GoDaddy і т.д.).

Якщо ви все ще це не зробили, не забудьте створити А запис, яка направляє ваш домен до IP-адресою вашого сервера. Це необхідно, тому що Let's Encrypt перевіряє, що ви є власником домену для якого видає сертифікат. Наприклад, якщо ви хочете отримати сертифікат для example.com, цей домен повинен працювати з вашого сервера для перевірки процесу роботи. Наша установка буде використовувати example.com і www.example.com як доменних імен, так як потрібні обидві DNS-записи.

Якщо ви відповідаєте всім вимогам давайте перейдемо до установки Let's Encrypt client.

 

Крок 1. Встановлення Let's Encrypt Client

Перший крок до використання Let's Encrypt це отримати SSL сертифікат для того щоб встановити програмне забезпечення letsencrypt на вашому сервері. На даний момент, кращим способом встановити Let's Encrypt є просто копіювання його з офіційного сховища GitHub. У майбутньому, швидше за все він буде доступний через менеджер пакетів.

Встановлення Git і bc

Давайте зараз встановимо Git і bc, щоб ми могли скопіювати сховище Let's Encrypt.

 

Оновлення ваш серверний менеджер пакетів за допомогою наступної команди:

$ sudo apt-get update

 

Потім встановимо пакети git і bc за допомогою apt-get:

$ sudo apt-get -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, зробіть це за допомогою наступної команди:

$ sudo apt-get install nginx

 

Для того, щоб переконатися, що каталог доступний для перевірки Let's Encrypt, давайте швидко зробимо зміни в нашій Nginx конфігурації. За замовчуванням він знаходиться в / etc/nginx/sites-available/default. Для його редагування ми використовуємо nano:

$ sudo nano /etc/nginx/sites-available/default

 

Всередині серверного блоку додайте цей блок локації:

      location ~ /.well-known {
               allow all;
       }

Ви також захочете подивитися за допомогою чого встановлено ваш кореневий документ використовуючи пошук директорії root, оскільки шлях потрібно для використання плагіна Webroot. Якщо ви використовуєте дефолтний конфігураційний файл, корінь буде /usr/share/nginx/html.

 

Збережіть і вийдіть.

Перезавантажте Nginx за допомогою цієї команди:

$ sudo service nginx reload

 

Тепер, коли ми знаємо наш 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 раніше, але ми покажемо вам приклад для першого разу.

У командному рядку введіть адресу електронної пошти, який буде використовуватися для повідомлень і відновлення втрачених ключів:

 

 

Email prompt

 

Далі ви повинні погодиться з Договором Підписника. Натисніть Agree:

 

Let's Encrypt Subscriber's Agreement

 

Якщо все пройшло успішно, ви повинні побачити висновок повідомлення, яке виглядає приблизно так:

 

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)

Тепер, коли у вас є SSL сертифікат, необхідно налаштувати веб-сервер Nginx, щоб використовувати його.

 

 

Змініть настройки Nginx, які містить ваш блок сервера. Знову ж таки, це знаходиться в

/etc/nginx/sites-available/default за замовчуванням:

$ sudo nano /etc/nginx/sites-available/default

 

Знайдіть блок сервера. Закоментуйте або видаліть рядки, призначені для налаштування цього блоку сервера прослуховувати порт 80. У конфігурації за замовчуванням, ці дві лінії повинні бути вилучені:

      listen 80 default_server;
      listen [::]:80 default_server ipv6only=on;

Замість цього ми збираємося налаштувати цей блок сервера прослуховувати порт 443 з ввімкненим SSL. У блоці server {, додайте наступні рядки, але замініть всі екземпляри example.com вашим власним доменом:

       listen 443 ssl;

    server_name example.com www.example.com;

 

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;

 

Це дозволяє вашому серверу використовувати SSL, і каже йому використовувати Let's Encrypt SSL сертифікат, отриманий нами раніше.

Щоб дозволити лише найбезпечніші SSL протоколи і шифри, а також використовувати сильну групу Діффі-Хелмана, що ми згенерували, додайте наступні рядки в тому ж блоці сервера:

 

         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;

 

І, нарешті, за межами вихідного блоку сервера (який прослуховує HTTPS, порт 443), додайте цей блок сервера для перенаправлення HTTP (порт 80) на HTTPS. Не забувайте замінювати виділену частину вашим власним доменним ім'ям: 

server {
   listen 80;
   server_name example.com www.example.com;
   return 301 https://$host$request_uri;
}

 

Збережіть і вийдіть.

Щоб зміни набули чинності, увійдіть або Nginx:

$ sudo service nginx reload

 

Сертифікат 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.

Ця відповідь Вам допомогла? 0 Користувачі, які знайшли це корисним (2 Голосів)