Як убезпечити Apache з Let's Encrypt на CentOS 7

Вступ

 

Цей урок покаже вам, як налаштувати TLS / SSL сертифікат від Let's Encrypt на сервері CentOS 7 під управлінням Apache в якості веб-сервера. Крім того, ми розглянемо, як автоматизувати процес оновлення сертифіката за допомогою cron завдання.

 

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

 

Вимоги

 

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

 

  • CentOS 7 сервер з некореневим sudo користувачем, який ви можете налаштувати, слідуючи нашим керівництвом по установці сервера
  • Веб-сервер Apache встановлений з одним або декількома правильно налаштованими доменними іменами

Для цілей цього посібника, ми встановимо Let's Encrypt сертифікат для домену example.com. Це буде як приклад по всьому керівництві, але ви повинні замінити його з вашим власним доменом.

 

 

Коли ви будете готові рухатися далі, необхідно увійти в ваш сервер, використовуючи обліковий запис sudo.

 

Крок 1. Створення віртуального хостингу для вашого домену

 

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

 

 

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

 

Створення структури каталогів

 

Ми почнемо з створення нової структури каталогів для зберігання ваших файлів віртуальних хостів всередині каталогу конфігурації Apache, / etc / httpd. Ми будемо слідувати стандартній структурі введеної збірками на основі Debian, що робить більш легким включення і відключення сайтів, які налаштовані як віртуальні хости всередині Apache.

 

 

Доступ до каталогу конфігурації Apache з:

 

$ cd /etc/httpd

 

По-перше, створіть каталог, який буде містити всі доступні сайти на цьому сервері:

 

$ sudo mkdir /etc/httpd/sites-available

 

Далі, створіть каталог, який вміщуватиме активні в даний момент (включені) веб-сайти, розміщених на цьому сервері. Цей каталог буде містити тільки символічні посилання на файли віртуальних хостів, розташованих усередині /etc/httpd/sites-available.

 

$ sudo mkdir /etc/httpd/sites-enabled

 

Тепер нам потрібно повідомити Apache, як знайти файли віртуальних хостів. Для досягнення цієї мети ми будемо редагувати основний конфігураційний файл Apache і додавати рядок, оголошуючи додатковий каталог для додаткових конфігураційних файлів. За допомогою командного рядка вашого улюбленого текстового редактора, відкрийте файл/etc/httpd/conf/httpd.conf:

 

$ sudo nano /etc/httpd/conf/httpd.conf

 

Додайте цей рядок в кінець файлу:

 

IncludeOptional sites-enabled/*.conf

 

Збережіть і закрийте файл, коли додасте цей рядок.

 

Створення нового файлу віртуального хоста

 

Наступним кроком є створення файлу конфігурації віртуального хоста. За допомогою командного рядка вашого улюбленого текстового редактора, створіть новий файл під / etc / httpd / sites-available. Ми назвемо файл example.com.conf, але ви можете вибрати будь-яке ім'я. Важливо, однак, щоб файл закінчувався розширенням .conf.

 

$ sudo nano /etc/httpd/sites-available/example.com.conf

 

Додайте наступний вміст в файл, замінивши example.com вашим власним доменом:

 

<VirtualHost *:80>
   ServerName example.com
   ServerAlias www.example.com
   DocumentRoot /var/www/html
   ErrorLog /var/log/apache/example.com/error.log
</VirtualHost>

 

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

 

  • ServerName: ім'я вашого головного домену.
  • ServerAlias ​​(optional): аліас для основного домену. Це звичайна практика, щоб додати WWW субдомен як аліаса (псевдоніма) основного домену.
  • DocumentRoot: місце, де повинні бути знайдені файли веб-сайту. У конфігурації Apache за замовчуванням на CentOS 7, головний кореневий документ, як правило, /var/www/html, але ви можете змінити це значення, якщо ви хочете розмістити файли сайту в іншому місці на сервері.
  • ErrorLog (необов'язково): призначене для користувача місце для ведення журналу помилок, характерних для даного віртуального хоста. Якщо ви не вкажете цю опцію, помилки будуть реєструватися в журналі помилок Apache за замовчуванням: /var/log/httpd/error_log.

Ввімкнення віртуального хоста

 

Файл віртуального хоста зараз створюється, але нам все ще потрібно сказати Apache, що ми хочемо щоб цей сайт був ввімкнений. Щоб домогтися цього, нам потрібно створити символічне посилання всередині sites-enabled, що вказує на новий файл конфігурації віртуального хоста. запустіть:

 

$ sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-enabled/example.com.conf

 

Таким чином, всякий раз, коли ви хочете, щоб відключити віртуальний хост, ви можете просто видалити посилання всередині sites-enabled і перезавантажити службу Apache, зберігаючи вихідний файл віртуального хоста всередині sites-available для будь-яких майбутніх потреб.

 

 

Якщо ваш домен був попередньо налаштований в якості основного веб-сайту Apache всередині файлу httpd.conf, важливо видалити стару конфігурацію з цього файлу, щоб уникнути несподіваного поведінки при генерації сертифікату SSL.

 

 

Відкрийте файл /etc/httpd/conf/httpd.conf і шукайте директиви ServerName і ServerAlias. Якщо вони встановлені в тому ж домені, який ви налаштували в якості віртуального хоста, ви повинні закомментировать їх, додавши знак # на початку рядка:

 

$ sudo nano /etc/httpd/conf/httpd.conf

 


# ServerName gives the name and port that the server uses to identify itself.
# This can often be determined automatically, but we recommend you specify
# it explicitly to prevent problems during startup.
#
# If your host doesn't have a registered DNS name, enter its IP address here.
#
#ServerName example.com:80
#ServerAlias www.example.com

Все, що залишилося зробити зараз - це перезапустити Apache, щоб зміни вступили в силу:

 

$ sudo systemctl restart httpd

 

Крок 2. Встановлення залежностей сервера

 

Перш ніж ми зможемо встановити Let's Encrypt клієнт і згенерувати сертифікат SSL, нам потрібно встановити кілька залежностей на сервері CentOS.

 

По-перше, встановіть репозиторій EPEL (Extra Packages for Enterprise Linux):

 

$ sudo yum install epel-release


Нам знадобиться git, щоб завантажити Let's Encrypt клієнт. Для встановлення git, виконайте наступну команду:

 

$ sudo yum install git

 

Тепер ви повинні бути готові слідувати решти цього керівництва.

 

Крок 3. Завантаження Let's Encrypt клієнта

 

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

 

 

Ми скопіюємо репозиторій Let's Encrypt в / opt, який є стандартним каталогом для розміщення програмного забезпечення сторонніх виробників на системах Unix:

 

$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt

 

Це створить локальну копію офіційного репозиторію Let's Encrypt під /opt/letsencrypt.

 

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

 

Створення SSL сертифікату для Apache за допомогою Let's Encrypt клієнта досить просте. Клієнт автоматично отримає і встановить новий сертифікат SSL, який дійсний для доменів, наданих в якості параметрів.

 

Доступ до каталогу letsencrypt:

 

$ cd /opt/letsencrypt

 

Щоб виконати інтерактивну установку і отримати сертифікат, який охоплює тільки один домен, виконайте команду letsencrypt-auto:

 

$ ./letsencrypt-auto --apache -d example.com

 

Якщо хочете встановити один сертифікат, який дійсний для декількох доменів або піддоменів, ви можете вказати їх в якості додаткових параметрів команди. Перше доменне ім'я в списку параметрів буде базовий домен, який використовується Let's Encrypt для створення сертифіката, і з цієї причини ми рекомендуємо вам вказати голе доменне ім'я верхнього рівня першим в списку, а потім - будь-які додаткові піддомени або аліаси (псевдоніми):

 

$ ./letsencrypt-auto --apache -d example.com -d www.example.com

 

Для цього прикладу, базовим доменом буде example.com.

 

Після того, як залежності будуть встановлені, вам буде представлено покрокове керівництво, щоб налаштувати параметри сертифіката. Вам буде запропоновано вказати адресу електронної пошти для повідомлень і відновлення втраченого ключа, і ви будете мати можливість вибирати між включенням і http і https доступу; або перенаправляти всі запити на https.

 

Коли встановлення успішно завершене, ви повинні побачити повідомлення, схоже на це:

Output:

IMPORTANT NOTES:

- If you lose your account credentials, you can recover through

  e-mails sent to user@example.com

- 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

 

Сформовані файли сертифікатів повинні бути доступні в /etc/letsencrypt/live.

 

Організація ваших віртуальних хостів

 

Плагін Apache для Let's Encrypt створює новий віртуальний хост-файл для забезпечення доступу по протоколу https для вашого домену. Це робиться автоматично за допомогою клієнта при створенні сертифіката за допомогою плагіна Apache. Проте, файл створюється всередині sites-enabled, каталогу, який повинен містити тільки посилання для реальних файлів віртуальних хостів, які розташовані всередині каталогу sites-available.

 

Щоб зберегти ваші файли віртуальних хостів організованими і відповідно до значень за замовчуванням, ви можете перемістити цей новий файл віртуального хоста в каталог sites-available і створити символічне посилання всередині sites-enabled:

 

$ sudo mv /etc/httpd/sites-enabled/example.com-le-ssl.conf /etc/httpd/sites-available/example.com-le-ssl.conf

 

$ sudo ln -s /etc/httpd/sites-available/example.com-le-ssl.conf /etc/httpd/sites-enabled/example.com-le-ssl.conf

Ваш каталог sites-enabled повинен виглядати приблизно так:

 

lrwxrwxrwx 1 root root   48 Jan 25 12:37 example.com.conf -> /etc/httpd/sites-available/example.com.conf
lrwxrwxrwx 1 root root   55 Jan 25 12:44 example.com-le-ssl.conf -> /etc/httpd/sites-available/example.com-le-ssl.conf

Перезапустіть Apache, щоб застосувати зміни:

 

$ sudo systemctl restart httpd

 

Перевірка стану сертифіката

 

Ви можете перевірити статус вашого SSL сертифікату за наступним посиланням (не забудьте замінити example.com вашим базовим доменом):

 

https://www.ssllabs.com/ssltest/analyze.html?d=example.com&latest

 

Тепер ви повинні мати можливість отримати доступ до веб-сайту, використовуючи префікс https.

 

Крок 5. Налаштування автоподовження

 

Сертифікат Let's Encrypt дійсний 90 днів, але рекомендується продовжувати термін дії сертифікатів кожні 60 днів, щоб забезпечити межі похибки. Let's Encrypt клієнт має комманду renew, яка автоматично перевіряє встановлені сертифікати і намагається продовжити їх, якщо залишилося менше ніж за 30 днів від дати закінчення терміну придатності.

 

Щоб запустити процес оновлення для всіх встановлених доменів, виконайте наступну команду:

 

./letsencrypt-auto renew

 

Так як ми недавно встановили сертифікат, то команда буде перевіряти тільки дату закінчення терміну дії та видасть повідомлення, що повідомляє про те, що сертифікат ще продовжувати не треба. Результат повинен виглядати приблизно так:

 

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

 

Збережіть і вийдіть. Це створить нову cron задачу, яка буде виконувати letsencrypt-auto renew команду щопонеділка о 2:30 ранку, і перезавантажувати Nginx о 2:35 ранку (тому оновлений сертифікат буде використовуватися). Висновок, що генерується командою буде надходити в лог-файл, розташований в /var/log/le-renewal.log.

 

Крок 6. Оновлення Let's Encrypt клієнта (не обов'язково)

 

Кожен раз, коли будуть доступні нові оновлення для клієнта, ви можете оновити локальну копію, запустивши git pull зсередини каталогу Let's Encrypt:

 

$ cd /opt/letsencrypt
$ sudo git pull

Це дозволить завантажити всі останні зміни в сховище, оновивши ваш клієнт.

 

Висновок

 

У цьому керівництві, ми побачили, як встановити безкоштовний SSL сертифікат від Let's Encrypt для захисту веб-сайту, розміщеного на сервері CentOS 7 з Apache. Оскільки Let's Encrypt client все ще знаходиться в бета-версії, ми рекомендуємо вам час від часу перевіряти офіційний блог Let's Encrypt на наявність оновлень.

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