Получение бесплатного ssl сертификата let’s encrypt

Введение

Let’s Encrypt — центр сертификации, предоставляющий бесплатные криптографические сертификаты X.509 для TLS-шифрования (HTTPS). Процесс выдачи сертификатов полностью автоматизирован.

Проект Let’s Encrypt создан для того, чтобы большая часть интернет-сайтов смогла перейти к шифрованным подключениям (HTTPS). В отличие от коммерческих центров сертификации, в данном проекте не требуется оплата, переконфигурация веб-серверов, использование электронной почты, обработка просроченных сертификатов, что делает процесс установки и настройки TLS-шифрования значительно более простым.

Шаг 3 — Доступ к HTTPS через брандмауэр

Если вы включили брандмауэр ufw в соответствии с предварительными требованиями, вам нужно будет настроить его так, чтобы разрешить трафик HTTPS. К счастью, при установке Nginx регистрирует в ufw несколько профилей.

Вы можете просмотреть текущие настройки с помощью следующей команды:

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

Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere                  
Nginx HTTP                 ALLOW       Anywhere                  
OpenSSH (v6)               ALLOW       Anywhere (v6)             
Nginx HTTP (v6)            ALLOW       Anywhere (v6)

Чтобы разрешить трафик HTTPS, активируйте профиль Nginx Full и удалите лишний профиль Nginx HTTP:

Теперь ваш статус должен выглядеть следующим образом:

Output

Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
Nginx Full                 ALLOW       Anywhere
OpenSSH (v6)               ALLOW       Anywhere (v6)
Nginx Full (v6)            ALLOW       Anywhere (v6)

Запустим Certbot и доставим наши сертификаты.

Настройка Certbot

В качестве настройки будем использовать метод webroot без остановки веб-сервера. Согласно протоколу ACME нам потребуется каталог, в который certbot будет писать файлы, которые будут доступны удостоверяющему серверу из сети.

В файле /etc/letsencrypt/cli.ini необходимо указать основные настройки:

При успешном обновлении сертификатов будет выполнена команда из post-hook. В нашем случае мы перезагрузим nginx.

При указании данных настроек certbot должен создавать файлы, необходимые для проверки прав на домен в каталоге /var/www/certbot. Целевой путь будет выглядеть примерно следующим образом:

Поэтому такие файлы должны быть доступны из сети на целевом домене по крайней мере по HTTP:

Для этого нам потребуется настроить наш веб-сервер. В качестве тестирования мы можем создать файл:

Обновление сертификатов

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

certbot certificates

Saving debug log to /var/log/letsencrypt/letsencrypt.log

-------------------------------------------------------------------------------
Found the following certs:
  Certificate Name: home.example.org
    Domains: home.example.org *.home.example
    Expiry Date: 2018-07-19 10:47:22+00:00 (VALID: 89 days)
    Certificate Path: /etc/letsencrypt/live/home.example.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/home.example.ru/privkey.pem
  Certificate Name: example.org
    Domains: example.org www.example.org
    Expiry Date: 2018-07-18 11:02:43+00:00 (VALID: 88 days)
    Certificate Path: /etc/letsencrypt/live/example.org/fullchain.pem
    Private Key Path: /etc/letsencrypt/live/example.org/privkey.pem
-------------------------------------------------------------------------------

Сертификаты Let’s Encrypt выдаются на 3 месяца, поэтому не ранее, чем за месяц, их необходимо обновить.

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

certbot renew

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.org.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------
Processing /etc/letsencrypt/renewal/example.com.conf
-------------------------------------------------------------------------------
Cert not yet due for renewal

-------------------------------------------------------------------------------

The following certs are not due for renewal yet:
  /etc/letsencrypt/live/example.org/fullchain.pem expires on 2018-07-19 (skipped)
  /etc/letsencrypt/live/example.com/fullchain.pem expires on 2018-07-18 (skipped)
No renewals were attempted.

Эта команда обрабатывает конфигурационные файлы в и при необходимости выполняет обновление сертификатов.

Для автоматического обновления сертификатов создайте файл для cron:

/etc/cron.d/certbot

30 4 * * 1 root /usr/bin/certbot renew >> /var/log/cron-renew.log

Согласно указанным настройкам, каждый понедельник в 4:30 будет производиться получение новых SSL-сертификатов взамен старых, если их пора обновлять, с записью лога в файл.

При обновлении сертификатов необходимо выполнять различные действия: перезапускать службы, которые их используют, переносить сертификаты на другие машины и т.п.. Для этих целей используется каталог /etc/letsencrypt/renewal-hooks/deploy/. Скрипты в этой папке будут выполнены при обновлении хотя бы одного сертификата.

Важно

Скрипты в директории /etc/letsencrypt/renewal-hooks/deploy/ должны быть с правами на выполнение.

Пример перезапуска Nginx при обновлении сертификатов

Этот пример подойдёт, если получение сертификата осуществляется через Nginx, находящийся на этой же машине.

/etc/letsencrypt/renewal-hooks/deploy/restart-nginx

#!/bin/bash
/etc/init.d/nginx restart

Установите права на выполнение скрипта:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/restart-nginx

Пример обновления сертификатов веб-сервера из хранилища сертификатов

В данном примере скрипт при обновлении сертификата для example.org будет вызывать скрипт, который обновит сертификаты на webserver, а также перезапустит на нём Nginx.

/etc/letsencrypt/renewal-hooks/deploy/push-to-nginx

#!/bin/bash
set -e

for domain in $RENEWED_DOMAINS; do
    case $domain in
    example.org)
        /var/calculate/bin/deploy-nginx $RENEWED_LINEAGE webserver
        ;;
    esac
done

Установите права на выполнение скрипта:

chmod 700 /etc/letsencrypt/renewal-hooks/deploy/push-to-nginx

Предварительные требования

Для данного обучающего руководства вам потребуется следующее:

  • Один сервер Ubuntu 20.04, настроенный в соответствии с обучающим модулем Начальная настройка сервера Ubuntu 20.04, включая пользователя без прав root с привилегиями sudo и брандмауэр.

  • Зарегистрированное доменное имя. В этом обучающем руководстве мы будем использовать example.com. Вы можете купить доменное имя на Namecheap, получить его бесплатно на Freenom или воспользоваться услугами любого предпочитаемого регистратора доменных имен.

  • На вашем сервере должны быть настроены обе нижеследующие записи DNS. Если вы используете DigitalOcean, ознакомьтесь с нашей документацией по DNS для получения подробной информации по их добавлению.

    • Запись A, где example.com указывает на публичный IP-адрес вашего сервера.
    • Запись A, где www.example.com указывает на публичный IP-адрес вашего сервера.
  • Nginx, установленный в соответствии с указаниями руководства Установка Nginx в Ubuntu 20.04. Убедитесь, что для вашего домена существует . В качестве примера мы используем в этом обучающем модуле /etc/nginx/sites-available/example.com.

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

Поскольку у Let’s Encrypt есть лимиты на количество обращений за сертификатами, лучше всего для начала проверить, что сертификаты для целевого домена удастся получить, для этого выполняем команду ниже с флагом —dry-run. Который пытается получить сертификаты в режиме тестов:

Если все прошло успешно и сертификаты могут быть получены команда выведет следующую информацию:

В случае неудачи certbot выведет информацию об ошибке, а также запишет расширенную информацию в лог.

Одной из причин неудачного выполнения может быть отсутствие или неверная настройка A и AAA записей. Необходимо убедиться, что они настроены верно, а также если указана AAA запись требуется проверить, что ваш сайт доступен по протоколу IPv6. Поскольку если AAA запись указана и ваш сайт не доступен по протоколу IPv6 вы получите ошибку при попытке получения сертификата, независимо от того что основная A запись может быть указана корректно.

При успешном выполнении команды мы можем смело получать сертификаты:

После этого у вас должны появиться сертификаты для указанных доменов.

Если требуется добавить домен или поддомен в сертификат

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

Вам будет предложено добавить новый домен в сертификат. Чтобы избежать вопросов можем дописать ключ:

После одной из этих команд новый домен будет добавлен в сертификат.

Настройка веб-сервера Apache на использование SSL-сертификата

После копирования файлов сертификата сайта и Центра Сертификации необходимо отредактировать параметры вашего веб-сервера Apache. Для этого подключитесь к вашему серверу по SSH от имени пользователя root и выполните следующие операции:

  1. Активируйте использование опции SSL веб-сервером Apache: Ubuntu/Debian:a2enmod ssl CentOS:yum install mod_ssl
  2. Откройте файл конфигурации сайта, для которого вы хотите установить SSL-сертификат. Например, если параметры веб-сайта хранятся в файле /etc/apache2/sites-enabled/000-default.conf: nano /etc/apache2/sites-enabled/000-default.conf Примечание: На Ubuntu/Debian файлы параметров сайтов Apache как правило находятся в директории /etc/apache2/sites-enabled/ . На CentOS стандартное расположение – /etc/httpd/conf.d/Для поиска нужной конфигурации вы можете использовать команду ls /директория/конфигураций (напр. ls /etc/apache2/sites-enabled), которая отображает полный список файлов в указанной директории. Затем с помощью команды nano вы можете открыть определенный файл (напр. nano /etc/apache2/sites-enabled/000-default.conf). Проверить, что открытый файл действительно является конфигурацией вашего сайта можно, найдя в нем строку ServerName. Ее значение должно соответствовать домену, для которого вы устанавливаете SSL-сертификат (напр. www.mydomain.ru) Примечание для CentOS: если редактор nano не установлен на вашем сервере, вы можете установить его с помощью команды yum install nano
  3. Добавьте приведенные ниже параметры в открытый файл конфигурации: SSLEngine on SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key Где:/etc/ssl/mydomain.ru_crt.crt – путь до файла сертификата вашего сайта /etc/ssl/mydomain.ru_ca.crt – путь до файла цепочки сертификатов Центра Сертификации (CA) /etc/ssl/mydomain.ru_key.key – путь к файлу вашего закрытого ключа

Примечание: если вы хотите, чтобы после установки SSL-сертификата ваш сайт был доступен только по безопасному протоколу https (порт 443), отредактируйте файл его конфигурации по аналогии с приведенным ниже Примером 1. Если же вы хотите, чтобы сайт также оставался по-прежнему доступен по незащищенному протоколу http (порт 80), воспользуйтесь Примером 2. Вносимые изменения выделены жирным шрифтом.

# The ServerName directive sets the request scheme, hostname and port that # the server uses to identify itself. This is used when creating # redirection URLs. In the context of virtual hosts, the ServerName # specifies what hostname must appear in the request’s Host: header to # match this virtual host. For the default virtual host (this file) this # value is not decisive as it is used as a last resort host regardless. # However, you must set it for any further virtual host explicitly. #ServerName www.mydomain.ru ServerAdmin webmaster@localhost DocumentRoot /var/www/html # Available loglevels: trace8, . trace1, debug, info, notice, warn, # error, crit, alert, emerg. # It is also possible to configure the loglevel for particular # modules, e.g. #LogLevel info ssl:warn ErrorLog $/error.log CustomLog $/access.log combined # For most configuration files from conf-available/, which are # enabled or disabled at a global level, it is possible to # include a line for only one particular virtual host. For example the # following line enables the CGI configuration for this host only # after it has been globally disabled with “a2disconf”. #Include conf-available/serve-cgi-bin.conf SSLEngine on SSLCertificateFile /etc/ssl/mydomain.ru_crt.crt SSLCertificateChainFile /etc/ssl/mydomain.ru_ca.crt SSLCertificateKeyFile /etc/ssl/mydomain.ru_key.key

Пример 2 (HTTPS + HTTP):

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

Linux

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

* где:

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

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

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

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

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

* где:

  • 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

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

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

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

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

2: Проверка конфигурации Nginx

Certbot должен иметь возможность найти нужный виртуальный хост в конфигурации Nginx, чтобы автоматически настроить SSL. Для этого он ищет директиву server_name, она определяет домен, для которого предназначен сертификат.

Если вы следовали руководству по созданию виртуальных хостов Nginx, у вас есть пользовательский виртуальный хост для вашего домена в /etc/nginx/sites-available/example.com, в котором установлена директива server_name с правильным значением.

Чтобы убедиться, что это так, откройте файл хоста для вашего домена в редакторе:

Найдите строку server_name:

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

Если же это не так, вам нужно обновить значение этой директивы. Затем сохраните и закройте редактор и проверьте синтаксис файла:

Если команда вернула ошибку, откройте файл виртуального хоста и исправьте ошибки (найдите опечатки, добавьте пропущенные символы и т.п.). Затем повторите проверку. Когда ошибок не будет, перезапустите Nginx:

Теперь Certbot сможет найти правильный файл.

Продление сертификатов

Поскольку сертификаты выдаются всего на 3 месяца, необходимо автоматизировать процедуру обновления сертификатов, чтобы не выполнять каждый раз вышеописанные действия. Для этого достаточно добавить в /etc/cron.d/certbot подобную запись:

Здесь мы проверяем существование исполняемого файла /usr/bin/certbot, если он есть засыпаем на рандомное время в пределах 43200 секунд (12 часов) и затем обновляем сертификаты. Ключ —allow-subset-of-names нужен чтобы certbot пытался получить сертификаты для частичного набора доменов. Это требуется в том случае, если подтвердить владение одного из ваших доменов не удастся, то certbot получит сертификаты для тех доменов владение которых будет подтверждено, иначе вы получите первую ошибку при проверке владения доменом и на этом все завершиться, certbot не станет получать оставшиеся сертификаты.

На этом все. Наш сертификат установлен и будет обновляться каждые 3 месяца самостоятельно, поэтому нам не потребуется ежегодно покупать и устанавливать платный сертификат.

Шаг 5 — Проверка автоматического обновления Certbot

Сертификаты Let’s Encrypt действительны только в течение 90 дней. Это сделано для стимулирования пользователей к автоматизации процесса обновления сертификатов. Установленный нами пакет выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.

Вы можете запросить статус таймера с помощью команды :

Чтобы протестировать процесс обновления, можно сделать запуск «вхолостую» с помощью :

Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.

Шаг 5 — Проверка автоматического обновления Certbot

Сертификаты Let’s Encrypt действительны только в течение 90 дней. Это сделано для стимулирования пользователей к автоматизации процесса обновления сертификатов. Установленный нами пакет certbot выполняет это автоматически, добавляя таймер systemd, который будет запускаться два раза в день и автоматически продлевать все сертификаты, истекающиее менее, чем через 30 дней.

Вы можете запросить статус таймера с помощью команды systemctl:

Output

● certbot.timer - Run certbot twice daily     Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled)     Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago    Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left   Triggers: ● certbot.service

Чтобы протестировать процесс обновления, можно сделать запуск «вхолостую» с помощью certbot:

Если ошибок нет, все нормально. Certbot будет продлевать ваши сертификаты, когда это потребуется, и перезагружать Nginx для активации изменений. Если процесс автоматического обновления когда-нибудь не выполнится, то Let’s Encrypt отправит сообщение на указанный вами адрес электронной почты с предупреждением о том, что срок действия сертификата подходит к концу.

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

Как было сказано выше, для получения бесплатного сертификата, 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/html; allow 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

service nginx 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.

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

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

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

4: Получение SSL-сертификата

Certbot предлагает различные способы получения сертификатов SSL через плагины. Плагин Nginx позаботится о реконфигурации Nginx и при необходимости перезагрузит конфигурацию. Чтобы использовать этот плагин, введите:

Эта команда запустит certbot с плагином — nginx, а флаг –d определит имена, для которых предназначен сертификат.

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

Если проверка пройдет успешно, certbot спросит, как вы хотите настроить HTTPS:

Сделайте свой выбор, затем нажмите Enter. Конфигурация будет обновлена, и Nginx перезагрузится, чтобы использовать новые настройки. Клиент certbot выведет сообщение о том, что процесс был выполнен успешно и скажет, где хранятся ваши сертификаты:

Сертификаты будут загружены и установлены

Попробуйте перезагрузить свой сайт, указав https://, и обратите внимание на индикатор безопасности в браузере. Он должен указывать, что сайт надежно защищен (как правило, для этого используется зеленый замочек в адресной строке)

Если вы протестируете свой сервер с помощью SSL Labs Server Test, он получит оценку A.

Теперь давайте протестируем процесс обновления сертификата.

1: Установка Certbot

Для начала нужно установить клиент Certbot.

На момент написания этой статьи Certbot недоступен в репозиториях Debian по умолчанию. Чтобы загрузить программное обеспечение с помощью apt, нужно добавить репозиторий backports в файл sources.list, где apt ищет источники пакетов. Backports – это пакеты тестовых и нестабильных дистрибутивов Debian, которые перекомпилируются, поэтому они будут работать без новых библиотек в стабильных дистрибутивах Debian.

Чтобы добавить репозиторий backports, откройте (или создайте) файл sources.list в каталоге /etc/apt/:

Добавьте в конец файла строку:

Этот репозиторий включает в себя основные пакеты, совместимые с , а также компоненты non-free и contrib, которые либо не совместимы с DFSG, либо включают зависимости.

Сохраните и закройте файл, а затем обновите индекс пакетов:

Теперь установите пакет certbot для Apache. Флаг –t включает установку из backports-репозитория, который вы только что добавили.

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

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

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

Чтобы упростить мы собираемся отобразить все HTTP-запросы для в один каталог .

Выполните следующие команды, чтобы создать каталог и сделать его доступным для записи для сервера Apache.

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

/etc/apache2/conf-available/letsencrypt.conf

/etc/apache2/conf-available/ssl-params.conf

Убедитесь, что загружены и и :

Включите модуль HTTP / 2, который сделает ваши сайты быстрее и надежнее:

Включите файлы конфигурации SSL:

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

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

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

Теперь, когда у вас есть файлы сертификатов, отредактируйте конфигурацию виртуального хоста вашего домена следующим образом:

/etc/apache2/sites-available/example.com.conf

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

Чтобы изменения вступили в силу, перезагрузите службу Apache:

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

Шаг 2 — Настройка конфигурации Nginx

Чтобы настраивать SSL автоматически, Certbot необходимо найти правильный блок в вашей конфигурации Nginx. Для этого нужно найти директиву , соответствующую домену, для которого вы запрашиваете сертификат.

Если вы выполнили , серверный блок для вашего домена должен располагаться по адресу с уже настроенной директивой .

Для проверки откройте файл конфигурации вашего домена в или другом предпочитаемом текстовом редакторе:

Найдите существующую строку . Конфигурация должна выглядеть следующим образом:

/etc/nginx/sites-available/example.com

Если все нормально, закройте редактор и переходите к следующему шагу.

Если нет, проведите обновление. Затем сохраните файл, закройте редактор и проверьте синтаксис внесенных правок конфигурации:

Если вы получите сообщение об ошибке, откройте файл серверного блока заново и проверьте его на наличие опечаток или отсутствующих символов. Когда синтаксис файла конфигурации будет правильным, перезагрузите Nginx для загрузки новой конфигурации:

Теперь Certbot сможет найти правильный блок и автоматически обновлять его.

Теперь изменим настройки брандмауэра, чтобы он разрешал трафик HTTPS.

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

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

Чтобы упростить мы собираемся отобразить все HTTP-запросы для в один каталог .

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

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

/etc/httpd/conf.d/letsencrypt.conf

/etc/httpd/conf.d/ssl-params.conf

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

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

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

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

CentOS 7 поставляется с Apache версии 2.4.6, которая не включает директиву . Эта директива доступна только в Apache 2.4.8 более поздней версии и используется для настройки параметров OpenSSL, таких как обмен ключами Диффи – Хеллмана (DH).

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

Теперь, когда все настроено, отредактируйте конфигурацию виртуального хоста вашего домена следующим образом:

/etc/httpd/conf.d/example.com.conf

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

Перезапустите службу Apache, чтобы изменения вступили в силу:

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

Выводы

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

Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.

Этот пост является частью серии Install LAMP Stack on CentOS 7. Другие сообщения из этой серии:

  • Как установить Apache на CentOS 7
  • Установите MySQL на CentOS 7
  • Как настроить виртуальные хосты Apache на CentOS 7
Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Мой редактор ОС
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: