Lets encrypt ssl сертификат инструкция centos

Получение бесплатного SSL сертификата Let’s Encrypt

Обновлено Обновлено: 25.05.2023
Опубликовано Опубликовано: 22.05.2017

Тематические термины: Let’s Encrypt, CentOS, Ubuntu

Процесс в данной статье описан на примере систем Linux CentOS, Ubuntu (Debian) и Windows. Настройка выполняется в несколько шагов.

Условия получения
Проверка права на домен
    Используя веб-сервер
    С помощью NS
Установка утилиты для запроса сертификата
    Certbot (Linux)
    LetsEncrypt-Win-Simple (Windows)
Получение сертификата вручную
    На Linux
    На Windows
Автоматическое продление
    Linux
    Windows
Получение Wildcard
Экспорт сертификатов в Windows с закрытым ключом
Let’s Encrypt для Exchange

Возможные ошибки
Читайте также

Условия получения бесплатного сертификата от Let’s Encrypt

Прежде чем начать, необходимо знать о некоторых нюансах получения сертификата Let’s Encrypt:

  • При запросе выполняется проверка домена. Для этого необходимо:
    1. либо создать TXT-запись в DNS.
    2. либо поднять веб-сервер, далее в его корне создается каталог .well-known, а в нем файл с произвольным названием. После корневой центр отправляет запрос серверу на загрузку данного файла и, в случае успеха, выдает сертификаты для указанного доменного имени.
  • SSL-сертификат выдается на 90 дней, поэтому необходимо по расписанию запускать команду на автоматическое продление ключа. Когда проходит 60 дней после начала использования нового сертификата, центр Let’s Encrypt может выдать новый.
  • Если выполнять запрос для домена 3 уровня и выше, он должен пройти DNS проверку на всех уровнях. Например, домен layer3.layer2.com должен отвечать на запросы как для layer3.layer2.com, так и для layer2.com.

Проверка домена

Как было сказано выше, для получения бесплатного сертификата, Let’s Encrypt должен удостовериться, что мы являемся владельцем домена. Свое право на его владение мы можем подтвердить, создав специальную TXT-запись или настроив веб-сервис, который будет отвечать на запросы.

Настройка веб-сервера

Данный способ немного сложнее для Linux (для Windows все настройки делает утилита автоматически), но позволяет без проблем настроить автоматическое продление.

Запрашивать сертификат Let’s Encrypt проще всего с веб-сервера, на котором запущен сайт для домена. Возможен альтернативный вариант с монтирование сетевой папки, но его рассматривать не будем.

Linux NGINX

Пример простого конфигурационного файла для NGINX:

server {
    listen       80;
    server_name  dmosk.ru;
    root   /usr/share/nginx/html;
}

* где dmosk.ru — домен, для которого работает сайт и для которого мы будем запрашивать сертификат; /usr/share/nginx/html — путь по умолчанию для nginx.

Если сервер уже используется для сайта, в секцию server добавляем:

location ~ /.well-known {
    root /usr/share/nginx/html;
    allow all;
}

* данными строчками мы говорим, что для всех запросов после /.well-known необходимо отдавать скрипты из каталога /usr/share/nginx/htmlallow all предоставляет доступ всем.

При необходимости выполнять проверку и использовать rewrite/return, добавляем что-то подобное:

    …
    location ~ /.well-known {
        root /usr/share/nginx/html;
        allow all;
    }
    if ($uri !~ /.well-known){
        return 301 https://$host$request_uri;
    }

После проверяем конфигурацию и перезапускаем nginx:

nginx -t && nginx -s reload

Linux Apache

Создаем общий конфигурационный файл, в котором пропишем алиас.

а) для CentOS:

vi /etc/httpd/conf.d/lets.conf

б) для Ubuntu / Debian:

vi /etc/apache2/conf-enabled/lets.conf

Со следующим содержимым:

Alias /.well-known/acme-challenge/ /var/www/html/.well-known/acme-challenge/

* в данном примере, запросы для страниц /.well-known/acme-challenge всех сайтов мы переводим в каталог /var/www/html/.well-known/acme-challenge.

Проверяем корректность конфигурационного файла:

apachectl configtest

И перезапускаем apache:

systemctl restart httpd || systemctl restart apache2

Windows

IIS должен отвечать на http-запрос до доменному имени, для которого мы планируем получить сертификат. Также в его настройках мы должны сделать привязку узла, для которого хотим получить сертификат к конкретному сайту. Для этого в консоли управления IIS раскрываем сайты и выбираем нужный нам (в данном примере, он всего один):

Выбираем сайт в консоли IIS

В меню справа кликаем по Привязки:

Переходим к настройкам привязок сайта

Изменяем привязку для имеющийся записи и, при необходимости, добавляем еще:

Настраиваем привязки сайта

Применяем настройки и закрываем консоль управления IIS.

С помощью записи в DNS

Данный метод проще, описанного выше, но он позволит настроить автоматическое продление сертификата только для некоторых DNS, для которых есть отдельные certbot-плагины. Поэтому данный способ, в большинстве случаев, будет удобен для проведения тестов.

У нас должна быть возможность управления записями в DNS. На данном этапе достаточно просто зайти в панель управления DNS и перейти к этапу получения сертификата (ниже по тексту). Если домен новый и был только-что делегирован на DNS, возможно, придется подождать, пока он не станет доступен для всех серверов DNS в глобальной сети.

Установка утилиты для получения сертификата

Certbot для Linux

1) Rocky Linux:

dnf install epel-release

dnf install certbot

2) на CentOS 8:

dnf —enablerepo=powertools install certbot

3) на CentOS 7:

yum install certbot

4) на Ubuntu 16.04 и выше, а также Debian:

apt update

apt install certbot

5) на CentOS 6 или Ubuntu 14.04 / 12.04:

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

mkdir /opt/certbot

cd /opt/certbot

Загружаем утилиту и разрешаем ее запуск:

wget https://raw.githubusercontent.com/certbot/certbot/7f0fa18c570942238a7de73ed99945c3710408b4/letsencrypt-auto-source/letsencrypt-auto -O /opt/certbot/letsencrypt-auto

chmod a+x ./letsencrypt-auto

Для удобства, делаем симлинк:

ln -s /opt/certbot/letsencrypt-auto /usr/local/sbin/certbot

Запустим команду:

certbot

При первом запуске certbot он автоматически предложит доустановить необходимые зависимости — соглашаемся.

LetsEncrypt-Win-Simple для Windows

На сайте GitHub скачиваем win-acme pluggable для нужной разрядности операционной системы:

Скачиваем win-acme pluggable для Windows x32 или x64

Раcпаковываем скачанный архив в любую папку.

Первое получение сертификата

Linux

1. Если мы подтверждаем право на домен при помощи веб-сервера, выполняем команду с таким синтаксисом:

certbot certonly —webroot —agree-tos —email <почта администратора домена> —webroot-path <путь до каталога с файлами проверки> -d <домен 1> -d <домен 2> -d …

* где:

  • certonly — запрос нового сертификата;
  • webroot — проверка будет выполняться на основе запроса к корню сайта;
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • webroot-path — каталог в системе Linux, который является корневым для сайта;
  • d — перечисление доменов, для которых запрашиваем сертификат.

а) Пример запроса при использовании веб-сервера NGINX:

certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /usr/share/nginx/html/ -d dmosk.ru -d www.dmosk.ru

б) Пример запроса при использовании веб-сервера Apache:

certbot certonly —webroot —agree-tos —email postmaster@dmosk.ru —webroot-path /var/www/html/ -d dmosk.ru -d www.dmosk.ru

После успешного выполнения команды, сертификаты будут созданы в каталоге /etc/letsencrypt/archive/dmosk.ru, а также симлинки на них в каталоге /etc/letsencrypt/live/dmosk.ru. При настройке приложений, стоит указывать пути до симлинков, так как при обновлении файлы в первом каталоге будут меняться, во втором — нет. Публичный ключ будет с именем cert.pem, а приватный — privkey.pem.

2. При подтверждении права на домен с TXT-записью:

certbot certonly —manual —agree-tos —email postmaster@dmosk.ru —preferred-challenges=dns -d dmosk.ru -d www.dmosk.ru

* где:

  • certonly — запрос нового сертификата;
  • manual — проверка домена вручную.
  • preferred-challenges — указывает метод проверки домена.
  • agree-tos — даем согласие на лицензионное соглашение;
  • email — почтовый адрес администратора домена;
  • d — перечисление доменов, для которых запрашиваем сертификат.

На запрос подтверждения отвечаем Y — система выдаст что-то на подобие:

Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:

W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm

Once this is deployed,

* Данное сообщение говорит, что мы должны создать TXT-запись _acme-challenge.dmosk.ru со значением W2SC9b88y2j2oUjhxVgS7Bphph9g5PqhkBq9KiWkLTm.

Создаем соответствующую запись в панели управления DNS, и в консоли сервера нажимаем Enter для продолжения. Если, как в данном примере, мы запрашиваем сертификат для нескольких узлов, повторяем действия.

Windows

Открываем командную строку от администратора и переходим в распакованный каталог. Например, если архив распакован на диск C, выполняем:

cd C:win-acme.v2.1.6.773.x64.pluggable

* где 2.1.6.773.x64 — моя версия утилиты.

Запускаем wacs:

wacs.exe

Если запускаем в Powershel, то так:

.wacs.exe

Утилита формирует бинарный сертификат для Windows, но если мы хотим получить файлы в формате pem, вводим:

wacs.exe —store pemfiles —pemfilespath C:Certificates

* где pemfilespath — путь до каталога, в котором должны оказаться файлы сертификата.

Откроется меню с выбором действия — вводим N, чтобы создать новый сертификат:

Начальная меню win-acme

Обратите внимание, что в зависимости от версии win-acme, некоторые пункты могут отличаться. Внимательно просмотрите варианты.

Выбираем сайт в IIS, который отвечает на запросы нашего домена (в нашем случае, это единственный Default Web Site, то есть 1):

Выбираем сайт для которого хотим получить сертификат

Если для сайта создано несколько привязок, выбираем 3, чтобы создать сертификаты для всех:

Выбираем все привязки

Вводим email адрес и подтверждаем корректность данных:

Вводим почтовый адрес для уведомлений

Утилита создаст необходимый каталог для проверки домена, запросит проверку, получит сертификат, добавит привязку к сайту по 443 порту с добавлением полученного сертификата и создаст в планировщике задание на автоматическое продление сертификата.

Автоматическое продление

Утилита certbot позволяет выполнить обновление сертификата в автоматическом режиме. В зависимости от операционной системы, инструменты различаются.

Linux

Смотрим полный путь до скрипта certbot:

which certbot

Открываем на редактирование cron и добавляем следующее:

crontab -e

Если система вернет ошибку crontab: command not found, устанавливаем пакет cron и запускаем сервис.

а) Для deb-систем:

apt install cron

systemctl start cron

systemctl enable cron

б) Для rpm-систем:

yum install cronie

systemctl start crond

systemctl enable crond

Прописываем строки в зависимости от нашей системы Linux.

а) для Ubuntu / Debian / Rocky Linux:

0 0 * * 1,4 /usr/bin/certbot renew —noninteractive

б) для CentOS:

0 0 * * 1,4 /bin/certbot renew —noninteractive

* в данном примере проверка и продление сертификата будет выполняться по понедельникам и четвергам (1,4) в 00:00. /usr/bin/certbot или /bin/certbot — путь, который мне выдала команда which certbot.

Команда certbot renew проверяет для всех наших сертификатов срок окончания, и если осталось менее 30 дней, запрашивает новый, сохраняет его в каталоге /etc/letsencrypt/archive/<домен> и обновляет симлинк.

Стоит иметь ввиду, что многие приложения, использующие сертификат, потребуют перезапуска, чтобы перечитать его. Поэтому хорошей идеей будет не просто обновлять сертификат, но и перезапускать сервис, который использует сертификат. Например, для NGINX:

systemctl reload nginx

Однако, нам нужно, чтобы это происходило автоматически. Для этого открываем файл:

vi /etc/letsencrypt/cli.ini

И добавляем строку:


deploy-hook = systemctl reload nginx

Windows

Настройка задания на автоматическое продление создается при получении сертификата. Проверить задание можно в планировщике заданий Windows:

Задание в планировщике Windows для автоматического продления сертификата

Wildcard

С марта 2018 года появилась возможность получить бесплатный сертификат на все поддомены, например, mail.dmosk.ru, test.dmosk.ru, admin.dmosk.ru (*.dmosk.ru).

Особенности получения Wildcard от Let’s Encrypt:

  1. Подтвердить право использования доменом можно только с помощью DNS — таким образом, затрудняется процесс автоматического продления. Нужно использовать плагины, которые позволяют автоматически создавать нужную запись на DNS, но они доступны далеко не для всех поставщиков услуг DNS. В противном случае, обновлять Wildcard нужно вручную.
    Также, некоторые панели управления хостингом, например ISP Manager с версии 5 могут управлять процессом получения Wildcard от Let’s Encrypt с возможностью автоматического продления (но необходимо, чтобы домен обслуживался на данном хостинге).
  2. Время действия сертификата также ограничено 3 месяцами.

Certbot

Необходимо, чтобы версия утилиты certbot была 0.22.0 и выше. Проверить текущую версию можно командой:

certbot —version

… если версия ниже, обновляем ее командами:

а) для CentOS / Red Hat:

yum update certbot

б) для Ubuntu / Debian: 

apt update

apt install —only-upgrade certbot

Процесс получения

Процесс очень похож на процесс получения сертификата с подтверждением домена в DNS.

Вводим команду:

certbot certonly —manual —agree-tos —email master@dmosk.ru —server https://acme-v02.api.letsencrypt.org/directory —preferred-challenges=dns -d dmosk.ru -d *.dmosk.ru

* обратим внимание на 2 детали: 1) мы добавили опцию server, чтобы указать, на каком сервере Let’s Encrypt должна проходить проверка DNS; 2) мы получаем сертификат как для *.dmosk.ru, так и самого dmosk.ru, так как первое не включает второго.

… система попросит создать TXT-запись в DNS, который обслуживает наш домен:

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —
Please deploy a DNS TXT record under the name
_acme-challenge.dmosk.ru with the following value:

DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI

Before continuing, verify the record is deployed.
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — —

* в данном примере система попросила создать TXT-запись _acme-challenge.dmosk.ru со значением DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI.

Заходим в панель управления DNS и создаем нужную запись. Если у нас свой сервер DNS, например, bind, то строка будет такой:

; TXT
_acme-challenge IN      TXT     DN8ovKFJ0leLQV9ofZ81mYKxojwIaed5g6f0bXZCYiI

Не торопимся нажимать Enter — после настройки DNS нужно немного времени (пару минут), чтобы настройка применилась. Проверить появление записи можно командой с рабочего компьютера:

nslookup -type=txt _acme-challenge.dmosk.ru 8.8.8.8

Как только видим, что настройки применились, нажимаем Enter — если это наш первый запрос Wildcard для данного домена, то система нас попросит создать еще одну запись — повторяем процедуру, создав в DNS вторую запись TXT.

Если все сделали правильно, то увидим:

IMPORTANT NOTES:
 — Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/dmosk.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/dmosk.ru/privkey.pem
   Your cert will expire on 2019-09-05. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   «certbot renew»
 — If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

… сертификат получен.

После получения сертификата мы не сможем экспортировать его с закрытым ключом. Мы можем изменить поведение, открыв файл settings.json в распакованном каталоге win-acme. Находим параметр PrivateKeyExportable и задаем ему значение:

«PrivateKeyExportable»: true,

После обновляем сертификат:

.wacs.exe —renew —force

Или без обновления сертификата мы можем найти файл .pfx в каталоге: %programdata%win-acme$baseuri$certificates.

Пароль для pfx можно найти в интерактивном меню wacs:

Manage Renewals > Show details

Сертификат Let’s Encrypt для почтового сервера MS Exchange

В комплекте установленного нами LetsEncrypt-Win-Simple для Windows идет скрипт ImportExchange.v2.ps1. Он нужен для импорта сертификата в конфигурацию почтового сервера MS Exchange.

Для начала создадим каталог, куда будет выгружен сертификат. В моем примере я воспользуюсь путем C:SSL.

Допустим, что адрес подключения к серверу будет exchange.dmosk.ru. Тогда получить сертификат и импортировать его в Exchange можно командой:

wacs.exe —source manual —host exchange.dmosk.ru —store centralssl,certificatestore —certificatestore My —acl-fullcontrol «network service,administrators» —centralsslstore «C:SSL» —installation iis,script  —installationsiteid 1 —script «./Scripts/ImportExchange.v2.ps1» —scriptparameters «‘{CertThumbprint}’ ‘IIS,SMTP,IMAP’ 1 ‘{CacheFile}’ ‘{CachePassword}’ ‘{CertFriendlyName}'»

* данная команда запросит сертификат для узла exchange.dmosk.ru, сохранит нужные файлы в каталоге C:SSL и импортирует полученные ключи в Microsoft Exchange Server.

Если мы запускаем команду в оболочке PowerShel, клманда должна начинаться с:

.wacs.exe …

После успешного выполнения команды, заходим в консоль управления сервером, переходим на вкладку управления сертификатами. В списке мы должны увидеть полученную последовательность от Let’s Encrypt. Кликаем по ней и назначаем сертификат для нужных служб Exchange (как правило, SMTP, IIS).

Возможные ошибки

Рассмотрим некоторые ошибки, с которыми мы можем столкнуться.

Missing command line flag or config entry for this setting

Ошибка появляется при попытке обновить сертификат для одного или нескольких доменов.

Причина: при обновлении сертификата, утилита certbot ищет настройки в конфигурационном файле /etc/letsencrypt/renewal/<имя домена>.conf. Если в данном файле не будет определена конфигурация для webroot_map, мы получим данную ошибку.

Решение:

Открываем конфигурационный файл для домена, например:

vi /etc/letsencrypt/renewal/dmoks.ru.conf

Находим опцию webroot_map (как правило, в самом низу). Либо она будет пустой, либо указывать на неправильный путь. Исправляем это:

dmoks.ru = /usr/share/nginx/html

* мы указываем домен и каталог, в котором будет создаваться проверочный файл.

Пробуем обновить сертификат.

ACMEv1 is deprecated and you can no longer get certificates from this endpoint

Ошибка появляется при попытке запросить или обновить сертификат. Полный текст ошибки:

Attempting to renew cert (xxx) from /etc/letsencrypt/renewal/xxx.conf produced an unexpected error: urn:acme:error:serverInternal :: The server experienced an internal error :: ACMEv1 is deprecated and you can no longer get certificates from this endpoint. Please use the ACMEv2 endpoint, you may need to update your ACME client software to do so. Visit https://community.letsencrypt.org/t/end-of-life-plan-for-acmev1/88430/27 for more information.. Skipping.

Причина: утилита на компьютере устарела. Она пытается использовать API-портал ACMEv1, который больше не поддерживается.

Решение: обновляем утилиту certbot.

а) Для Ubuntu/Debian:

apt update

apt —only-upgrade install certbot

б) Для Rocky Linux/CentOS:

yum update certbot

Читайте также

Другие полезные материалы:

1. Примеры редиректов в NGINX.

2. Настройка Apache + SSL для работы сайта по HTTPS.

29 февраля, 2016 12:20 пп
8 968 views
| 1 комментарий

Centos

Это руководство поможет установить TLS/SSL-сертификат от Let’s Encrypt на сервер Apache в CentOS 7, а также автоматизировать обновление сертификата при помощи cron.

Сертификаты SSL нужны веб-серверам для шифрования трафика между сервером и клиентом, что обеспечивает дополнительный уровень безопасности. Центр сертификации Let’s Encrypt позволяет быстро получить и установить бесплатный сертификат.

Требования

  • Предварительно настроенный сервер CentOS 7 и учётная запись не-root пользователя с доступом к sudo (инструкции по настройке можно найти здесь).
  • Предварительно установленный веб-сервер Apache.
  • Доменное имя; в данном руководстве используется условный домен example.com.Его нужно заменить своим доменным именем.

1: Создание виртуального хоста

Плагин Apache для Let’s Encrypt позволяет упростить процесс генерирования и установки SSL-сертификата. Для корректной работы плагина необходимо создать виртуальный хост. При этом каждому отдельному домену, на который нужно установить сертификат, нужен индивидуальный виртуальный хост.

Примечание: Если вы настроили виртуальные хосты ранее, пропустите этот раздел.

Структура каталогов

Для начала нужно создать в каталоге /etc/httpd структуру каталогов для хранения фалов виртуальных хостов.

Следуйте стандартной структуре дистрибутивов на основе Debian, которая позволяет быстро включать и отключать виртуальны хосты.

Откройте каталог настроек Apache:

cd /etc/httpd

Каталог sites-available хранит все существующие на данном сервере виртуальные хосты; создайте этот каталог:

sudo mkdir /etc/httpd/sites-available

Затем создайте каталог для хранения включенных виртуальных хостов; согласно стандартной структуре этот каталог называется sites-available и хранит только символьные ссылки на файлы включенных виртуальных хостов.

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

После этого нужно сообщить серверу Apache, как найти файлы виртуальных хостов. Для этого нужно отредактировать главный конфигурационный файл и добавить в него строку, объявляющую каталог для дополнительных конфигурационных файлов. Откройте файл в текстовом редакторе:

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

Добавьте в файл такой код:

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

Примечание: Не забудьте заменить условные данные своими.

Сохраните и закройте файл.

Вышеприведённый код состоит из следующих директив:

  • ServerName: доменное имя.
  • ServerAlias (опционально): алиасы доменного имени; как правило, в качестве алиаса используется домен с префиксом 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. При этом файл виртуального хоста удалять не нужно.

Если данный домен был настроен как главный домен сайта 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

Примечание: Подробный мануал по настройке виртуальных хостов Apache можно найти здесь.

2: Установка зависимостей

Прежде чем приступить к установке клиента Let’s Encrypt и созданию сертификата SSL, нужно установить несколько зависимостей.

Для начала добавьте репозиторий EPEL:

sudo yum install epel-release

Для загрузки клиента Let’s Encrypt понадобится git:

sudo yum install git

Для работы скрипта обновления сертификата необходим инструмент bc (он рассчитывает дату истечения срока действия сертификата). Чтобы установить его, выполните:

sudo yum install bc

3: Загрузка клиента Let’s Encrypt

Теперь можно загрузить клиент Let’s Encrypt из официального репозитория.

Поскольку клиент Let’s Encrypt еще находится в бета-версии, его, вероятно, придётся часто обновлять, чтобы исправить баги и получить доступ к новой функциональности.

Клонируйте репозиторий Let’s Encrypt в каталог /opt, предназначенный для хранения дополнительных пакетов системы.

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

На сервере появится локальная копия официального репозитория Let’s Encrypt в каталоге /opt/letsencrypt.

4: Создание SSL-сертификата

Процесс генерирования SSL-сертификата для Apache с помощью клиента Let’s Encrypt довольно прост. Клиент автоматически получит и установит сертификат, валидный для всех доменов, указанных в качестве аргументов.

Откройте каталог letsencrypt:

cd /opt/letsencrypt

Чтобы запустить интерактивную установку и получить сертификат для одного домена, выполните команду:

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

Примечание: Замените условный домен example.com своим доменным именем.

Чтобы получить один сертификат для нескольких доменов и поддоменов, укажите их как дополнительные параметры в команде. В таком случае первый домен в списке будет базовым; потому рекомендуется начинать список с самого домена, а уже затем указывать  дополнительные поддомены или алиасы. Например:

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

В этом примере основным доменом будет example.com. Эта информация понадобится в дальнейшем для автоматизации обновлений сертификата.

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

Если установка прошла успешно, на экране появится следующее сообщение:

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-04-21. 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 you 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. Однако этот файл будет помещён в каталог sites-enabled, а этот каталог не должен содержать ничего кроме символьных ссылок.

Чтобы сохранить правильную структуру файлов виртуальных хостов, нужно переместить новый файл в каталог 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

Состояние сертификата

Проверить состояние сертификата можно по следующей ссылке (вместо условного домена укажите своё базовое доменное имя):

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

5: Автоматическое обновление

Сертификаты Let’s Encrypt действительны в течение 90 дней, но во избежание ошибок их рекомендуется обновлять каждые 60 дней. На момент написания статьи клиент не оборудован функцией автоматического обновления сертификатов. Этот процесс можно выполнить вручную, просто запустив клиент Let’s Encrypt с использованными ранее параметрами.

Чтобы вручную обновить сертификат Let’s Encrypt для Apache, отключив интерактивный режим, введите:

./letsencrypt-auto certonly --apache --renew-by-default -d example.com -d www.example.com

Если при первом запуске команды (для установки сертификата) вы задали несколько доменных имен, при обновлении вы должны задать точно тот же список доменов, в противном случае клиент сгенерирует новый сертификат вместо обновления существующего.

Надёжный способ обеспечить своевременное обновление сертификата – это демон cron.

Для облегчения этого процесса можно использовать скрипт, который будет проверять дату истечения срока действия сертификата и запускать обновление, если до истечения срока остаётся менее 30 дней.

Скрипт будет автоматически запускаться один раз в неделю. Таким образом, в случае сбоя cron у вас будет в запасе 30 дней, чтобы снова попытаться обновить сертификат.

Загрузите скрипт и сделайте его исполняемым; предварительно можно просмотреть его содержимое.

sudo curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew-centos
sudo chmod +x /usr/local/sbin/le-renew

Скрипт le-renew использует базовый домен в качестве аргумента. Узнать, какой домен является базовым, можно в /etc/letsencrypt/live (в этом каталоге хранятся генерированные сертификаты).

Чтобы запустить скрипт вручную, введите:

sudo le-renew example.com

Поскольку текущий сертификат был создан только что, у скрипта нет необходимости обновлять его и он просто сообщит, сколько дней осталось до истечения срока действия сертификата:

Checking expiration date for example.com...
The certificate is up to date, no need for renewal (89 days left).

После этого нужно отредактировать crontab и добавить в таблицу новую команду, которая будет запущена раз в неделю.

sudo crontab -e
Затем добавьте следующую строку:
30 2 * * 1 /usr/local/sbin/le-renew example.com >> /var/log/le-renew.log

Сохраните и закройте файл. Теперь cron будет запускать команду le-renew каждый понедельник в 2:30 ночи, а вывод команды будет помещён в лог /var/log/le-renewal.log.

Примечание: Больше информации о работе cron можно получить в статье «Автоматизация задач с помощью cron».

6: Обновление клиента Let’s Encrypt (опционально)

После выхода обновлений для клиента Let’s Encrypt можно обновить локальную копию при помощи команды:

cd /opt/letsencrypt
sudo git pull

Эта команда загрузит все обновления клиента.

Заключение

Теперь веб-сервер Apache защищён при помощи SSL-сертификата Let’s Encrypt. Не забывайте о том, что клиент Let’s Encrypt до сих пор находится в бета-версии, потому очень важно следить за выходом обновлений и своевременно устанавливать их.

Tags: Apache, CentOS 7, cron, Let’s Encrypt, SSL

Let’s Encrypt — это бесплатный открытый центр сертификации, разработанный исследовательской группой Internet Security Research Group (ISRG). Сертификатам, выданным Let’s Encrypt, сегодня доверяют почти все браузеры.

В этом руководстве мы предоставим пошаговые инструкции о том, как защитить ваш Nginx с помощью Let’s Encrypt с помощью инструмента certbot в CentOS 7.

Подготовка

Прежде чем продолжить работу с этим руководством, убедитесь, что вы выполнили следующие предварительные требования:

  • У вас есть доменное имя, указывающее на IP-адрес вашего публичного сервера. В этом руководстве мы будем использовать example.com .
  • Вы включили репозиторий EPEL и установили Nginx, следуя инструкциям по установке Nginx на CentOS 7 .

Установить Certbot

Certbot — это простой в использовании инструмент, который может автоматизировать задачи по получению и обновлению SSL-сертификатов Let’s Encrypt и настройке веб-серверов.

Чтобы установить пакет certbot из репозитория EPEL, выполните:

sudo yum install certbot

Создать сильную группу Dh (Diffie-Hellman)

Обмен ключами Диффи – Хеллмана (DH) — это метод безопасного обмена криптографическими ключами по незащищенному каналу связи.

Сгенерируйте новый набор 2048-битных параметров DH, введя следующую команду:

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

При желании вы можете изменить размер до 4096 бит, но в этом случае генерация может занять более 30 минут в зависимости от энтропии системы.

Получение SSL-сертификата Let’s Encrypt

Чтобы получить сертификат SSL для нашего домена, мы собираемся использовать плагин Webroot, который работает путем создания временного файла для проверки запрашиваемого домена в каталоге ${webroot-path}/.well-known/acme-challenge . Сервер Let’s Encrypt отправляет HTTP-запросы к временному файлу, чтобы убедиться, что запрошенный домен разрешается на сервер, на котором работает certbot.

Чтобы упростить .well-known/acme-challenge мы собираемся отобразить все HTTP-запросы для .well-known/acme-challenge в один каталог /var/lib/letsencrypt .

Следующие команды создадут каталог и сделают его доступным для записи для сервера Nginx.

sudo mkdir -p /var/lib/letsencrypt/.well-knownsudo chgrp nginx /var/lib/letsencryptsudo chmod g+s /var/lib/letsencrypt

Чтобы избежать дублирования кода, создайте следующие два фрагмента, которые мы собираемся включить во все наши файлы блоков сервера Nginx:

sudo mkdir /etc/nginx/snippets

/etc/nginx/snippets/letsencrypt.conf

location ^~ /.well-known/acme-challenge/ {
  allow all;
  root /var/lib/letsencrypt/;
  default_type "text/plain";
  try_files $uri =404;
}

/etc/nginx/snippets/ssl.conf

ssl_dhparam /etc/ssl/certs/dhparam.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS';
ssl_prefer_server_ciphers on;

ssl_stapling on;
ssl_stapling_verify on;
resolver 8.8.8.8 8.8.4.4 valid=300s;
resolver_timeout 30s;

add_header Strict-Transport-Security "max-age=15768000; includeSubdomains; preload";
add_header X-Frame-Options SAMEORIGIN;
add_header X-Content-Type-Options nosniff;

Приведенный выше фрагмент включает в себя модули обработки, рекомендованные Mozilla , включает сшивание OCSP, строгую безопасность передачи HTTP (HSTS) и обеспечивает соблюдение нескольких ориентированных на безопасность заголовков HTTP.

После создания фрагментов откройте блок сервера домена и letsencrypt.conf фрагмент letsencrypt.conf как показано ниже:

/etc/nginx/conf.d/example.com.conf

server {
  listen 80;
  server_name example.com www.example.com;

  include snippets/letsencrypt.conf;
}

Перезагрузите конфигурацию Nginx, чтобы изменения вступили в силу:

sudo systemctl reload nginx

Теперь вы можете запустить Certbot с подключаемым модулем webroot и получить файлы сертификатов SSL для своего домена, выполнив:

sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com

Если сертификат SSL получен успешно, certbot напечатает следующее сообщение:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/example.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/example.com/privkey.pem
   Your cert will expire on 2018-06-11. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, 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/nginx/conf.d/example.com.conf

server {
    listen 80;
    server_name www.example.com example.com;

    include snippets/letsencrypt.conf;
    return 301 https://$host$request_uri;
}

server {
    listen 443 ssl http2;
    server_name www.example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    return 301 https://example.com$request_uri;
}

server {
    listen 443 ssl http2;
    server_name example.com;

    ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/example.com/chain.pem;
    include snippets/ssl.conf;
    include snippets/letsencrypt.conf;

    # . . . other code
}

В приведенной выше конфигурации мы форсируем HTTPS и перенаправляем версию с www на версию без www.

Наконец, перезагрузите службу Nginx, чтобы изменения вступили в силу:

sudo systemctl reload nginx

Автоматическое продление SSL-сертификата Let’s Encrypt

Сертификаты Let’s Encrypt действительны в течение 90 дней. Чтобы автоматически продлевать сертификаты до истечения срока их действия, мы создадим задание cron, которое будет запускаться два раза в день и автоматически обновлять любой сертификат за 30 дней до истечения срока его действия.

Запустите команду crontab чтобы создать новое задание crontab :

sudo crontab -e

Вставьте следующие строки:

0 */12 * * * root test -x /usr/bin/certbot -a ! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload nginx"

Сохраните и закройте файл.

Чтобы протестировать процесс обновления, вы можете использовать команду certbot с параметром --dry-run :

sudo certbot renew --dry-run

Если ошибок нет, значит процесс продления теста прошел успешно.

Выводы

В этом руководстве вы использовали клиент Let’s Encrypt, certbot, для загрузки сертификатов SSL для вашего домена. Вы также создали сниппеты Nginx, чтобы избежать дублирования кода, и настроили Nginx для использования сертификатов. В конце руководства вы настроили задание cron для автоматического продления сертификата.

Если вы хотите узнать больше о том, как использовать Certbot, их документация является хорошей отправной точкой.

В этой статье мы рассмотрим, как настроить бесплатный TLS/SSL сертфикат Let’s Encrypt для сайта на веб-сервере Nginx на Linux CentOS. Покажем, как выпустить сертификат для одного домена (или wildecard SSL-сертификат для всех поддоменов), настроить автопродление сертфикатов.

Содержание:

  • Установка certbot — клиента Let’s Encrypt в Linux
  • Выпуск SSL сертификата для Nginx
  • Установка SSL сертификата Let’s Encrypt на веб-сайт Nginx
  • Бесплатные Wildcard SSL сертификаты Let’s Encrypt для поддоменов
  • Продление сертификатов Let’s Encrypt

Установка certbot — клиента Let’s Encrypt в Linux

Выпускать сертификат Let’s Encrypt мы будем с помощью certbot. Для установка бота, нужно воспользоваться утилитой snapd, если у вас ее нет, установите ее:

# yum install snapd -y

установка snapd в linux

После установки snapd, его нужно добавить, как сервис и создать симлинк для удобства запуска:

# systemctl enable --now snapd.socket
# ln -s /var/lib/snapd/snap /snap

Теперь можно установить certbot:

# sudo snap install --classic certbot

установка certbot в linux через snap Все также для удобства запуска, создадим симлинк:

# ln -s /snap/bin/certbot /usr/bin/certbot

Выпуск SSL сертификата для Nginx

Чтобы выпустить SSL сертификат для сайта, запустите команду:

# certbot certonly --nginx

Утилита проверит конфигурацию nginx и выдаст все сайты на которые можно установить сертификат (утилита получает список сайтов из конфигурации nginx). В процессе бот будет запрашивать у вас данные, email, домены и тд.

генерация сертификата let's encrypt с помощью certbot для nginx в linux

В моем случае домен один и я выбрал его. Если у вас нет проблем с DNS-записями домена и веб-сервером, то SSL сертификат должен выпуститься без ошибок.

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

Чтобы SSL сертификат Let’s Encrypt заработал на вашем сайте, нужно использовать следующий конфигурационный файл nginx для вашего домена:

server {
  listen 443 ssl http2;
  server_name lets.build-centos.ru;
  root /var/www/lets.build-centos.ru;
  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/lets.build-centos.ru;
  fastcgi_param SCRIPT_FILENAME /var/www/lets.build-centos.ru/$fastcgi_script_name;
  fastcgi_param PATH_TRANSLATED /var/www/lets.build-centos.ru/$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:

[[email protected] 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 для поддоменов

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

# certbot run -a manual -i nginx -d *.lets.build-centos.ru

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

Не нажимайте “Enter” пока не убедитесь, что запись доступна на глобальных DNS. В панели регистратора домена создайте DNS запись типа TXT с именем _acme-challenge и значением, скопированным из консоли certbot.

letsencrypt-auto certonly wildecard сертфикат для поддоменов

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

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

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

Директория хранения сертификатов и ключей в этом случае отличается от той, в который помещен сертификат для основного домена.

Проверим, работает ли сертификат на поддомене test.build-centos.ru:

wildcard сертфикат lets' encrypt

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

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

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

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

# /certbot renew --dry-run

Если запустить команду сразу после того, как вы выпустили сертификаты, появится уведомление, что сертификат не требует перевыпуска:

Cert not yet due for renewal

обновление сертфиката let's ecncrypt

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

00 00 * * 6 /certbot renew --dry-run >> /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.

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

Бесплатные сертификаты Let’s Encrypt также можно использовать и для сайтов на IIS.

Securing your web server is always one of the key factors that you should consider before going live with your website. A security certificate is critical for securing traffic sent from web browsers to web servers and in so doing, it’ll inspire users to exchange data with your website in the full knowledge that the traffic sent is secured.

In most cases, security certificates are paid for and renewed annually. Let’s Encrypt certificate is a free, open, and automated certificate authority that you can use to encrypt your site. The certificate expires after every 90 days and auto-renews at absolutely no cost.

Recommended Read: How to Secure Nginx with Let’s Encrypt on CentOS 8

In this article, we will show you how you can install the Let’s Encrypt Certificate with Certbot for the Apache web server and later, configure the certificate to renew automatically on CentOS 8.

Prerequisites

Before you get started, ensure that you have the following in place:

1. An instance of CentOS 8 server with Apache HTTP web server installed and running. You can confirm that your apache web server is up and running.

$ sudo dnf install httpd
$ sudo systemctl status httpd

Check Apache Web Server Status

Check Apache Web Server Status

2. A Fully Qualified Domain Name (FQDN) pointing to your web server’s public IP address on your DNS web hosting provider. For this guide, we will use linuxtechwhiz.info pointing to the server’s IP 34.67.63.136.

Domain A Record Pointing to Server IP Address

Domain A Record Pointing to Server IP Address

Step 1. Install Certbot in CentOS 8

Certbot is a client that automates the installation of the security certificate. It fetches the certificate from Let’s encrypt authority and deploys it on your web server without much of a hassle.

Certbot is absolutely free and will enable you to install the certificate in an interactive way by generating instructions based on your web server’s configuration.

Before downloading the certbot, first, install packages that are necessary for the configuration of an encrypted connection.

We will start off by installing the EPEL repository which provides high-quality additional packages for RHEL-based systems:

$ sudo dnf install epel-release

Next, install the mod_ssl and openssl packages.

$ sudo dnf install mod_ssl openssl

Install Mod_SSL on CentOS 8

Install Mod_SSL on CentOS 8

Once all the dependencies have been installed, install Certbot and the Apache module for Certbot.

$ sudo dnf install certbot python3-certbot-apache

Install Certbot in CentOS

Install Certbot in CentOS

The command installs Certbot, the Apache module for Certbot, and other dependencies.

Step 2: Create an Apache Virtual Host

The next step will be to create a virtual host file for our domain – linuxtechwhiz.info. Begin by first creating the document root where you will place your HTML files.

$ sudo mkdir /var/www/linuxtechwhiz.info.conf

Create a test index.html file as shown.

$ sudo echo “<h1>Welcome to Apache HTTP server</h1>” > /var/www/linuxtechwhiz.info/index.html

Next, create a virtual host file as shown.

$ sudo vim /etc/httpd/conf.d/linuxtechwhiz.info

Append the configuration below.

<VirtualHost *:443>
  ServerName linuxtechwhiz.info
  ServerAlias www.linuxtechwhiz.info
  DocumentRoot /var/www/linuxtechwhiz.info/
  <Directory /var/www/linuxtechwhiz.info/>
      Options -Indexes +FollowSymLinks
      AllowOverride All
  </Directory>
  ErrorLog /var/log/httpd/www.linuxtechwhiz.info-error.log
  CustomLog /var/log/httpd/www.linuxtechwhiz.info-access.log combined
</VirtualHost>

Save and exit.

Assign the permissions to the Document root as shown.

$ sudo chown -R apache:apache /var/www/linuxtechwhiz.info

For the changes to come into effect, restart the Apache service.

$ sudo systemctl restart httpd

Step 3: Install Let’s Encrypt SSL Certificate on CentOS 8

Now run certbot as shown to commence the installation of the Let’s Encrypt certificate.

$ sudo certbot --apache -d domain.com

In our case, this will be:

$ sudo certbot --apache -d linuxtechwhiz.info

The command will take you through a series of prompts to enable you to configure Lets Encrypt for your domain. Be sure to provide your email address, Accept the Terms of Service and specify the domain names you wish to use the HTTPS protocol which is the encrypted version of HTTP.

Let's Encrypt SSL Certification Installation on Domain

Let’s Encrypt SSL Certification Installation on Domain
Let's Encrypt SSL Certification Info
Let’s Encrypt SSL Certification Info

If all went well, you should get a congratulatory message at the end informing you that your site has been secured using Let’s Encrypt certificate. Your certificate’s validity will also be displayed – which is usually after 90 days after deployment.

Now head back to your virtual host file and append the following lines of configuration.

SSLEngine On
 SSLCertificateFile    /etc/letsencrypt/live/linuxtechwhiz.info/fullchain.pem
 SSLCertificateKeyFile  /etc/letsencrypt/live/linuxtechwhiz.info/privkey.pem

Save and exit.

The final Apache virtual host configuration will look something like this:

<VirtualHost *:443>
  ServerName linuxtechwhiz.info
  ServerAlias www.linuxtechwhiz.info
  DocumentRoot /var/www/linuxtechwhiz.info/
  <Directory /var/www/linuxtechwhiz.info/>
      Options -Indexes +FollowSymLinks
      AllowOverride All
  </Directory>
  ErrorLog /var/log/httpd/www.linuxtechwhiz.info-error.log
  CustomLog /var/log/httpd/www.linuxtechwhiz.info-access.log combined

 SSLEngine On
 SSLCertificateFile    /etc/letsencrypt/live/linuxtechwhiz.info/fullchain.pem
 SSLCertificateKeyFile  /etc/letsencrypt/live/linuxtechwhiz.info/privkey.pem
</VirtualHost>

Once again, restart Apache.

$ sudo systemctl restart httpd

Step 4: Verifying the Let’s Encrypt SSL Certificate

To verify that everything is working, launch your browser and visit your server’s IP address. You should now see a padlock symbol at the beginning of the URL.

Verify Let's Encrypt SSL Certificate

Verify Let’s Encrypt SSL Certificate

To get more details, click on the padlock symbol & click on the ‘Certificate’ option on the pull-down menu that appears.

Check Let's Encrypt SSL Certificate

Check Let’s Encrypt SSL Certificate

The certificate details will be displayed on the next pop-up window.

Let's Encrypt SSL Certificate Info

Let’s Encrypt SSL Certificate Info

Also, you can test your server at https://www.ssllabs.com/ssltest/ and your site should get an ‘A’ grade as shown.

Check Let's Encrypt SSL Certificate Rating

Check Let’s Encrypt SSL Certificate Rating

Step 5: Auto-Renew Let’s Encrypt SSL Certificate

Let’s Encrypt is only valid for 90 days only. Usually, the renewal process is carried out by the certbot package which adds a renew script to /etc/cron.d directory. The script runs twice daily and will automatically renew any certificate within 30 days of expiry.

To test the auto-renewal process, conduct a dry run test with certbot.

$ sudo /usr/local/bin/certbot-auto renew --dry-run

If no errors were encountered, then it implies you are good to go.

This brings us to the end of this guide. In this guide, we demonstrated how you can use certbot to install and configure the Let’s Encrypt certificate on Apache webserver running on a CentOS 8 system.

Понравилась статья? Поделить с друзьями:
  • Lenze 9300 vector инструкция на русском
  • Letech leather ultimate cleaner инструкция
  • Lenze 8400 topline c инструкция на русском
  • Letatwin lm 390a инструкция на русском скачать
  • Lenze 8400 stateline c инструкция на русском