Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры


UnixForum
Беспроводные выключатели nooLite купить дешевый 
компьютер родом из Dhgate.com


Lines Club

Ищем достойных соперников.

Библиотека сайта или "Мой Linux Documentation Project"

Использование клиента LetsEncrypt из репозитория дистрибутива Fedora

Оригинал: LetsEncrypt now available in Fedora
Автор: James Hogarth
Дата публикации: 14 декабря 2015 г.
Перевод: А.Панин
Дата перевода: 7 мая 2016 г.

Использование клиента LetsEncrypt

Не так давно началось открытое бета-тестирование проекта LetsEncrypt. Благодаря работе участников команды LetsEncrypt и разработчиков дистрибутива Fedora, официальный клиент LetsEncrypt был незамедлительно размещен в репозиториях Fedora 23 и Rawhide. Если вы хотите узнать подробнее о том, как он работает и для чего предназначен, вы можете обратиться к соответствующему разделу официального сайта проекта. В данной же статье мы рассмотрим процесс настройки веб-сервера Apache с целью использования сертификата проекта LetsEncrypt для шифрования HTTP-трафика.

Проект LetsEncrypt предоставляет бесплатные сертификаты SSL всем желающим

Проект LetsEncrypt предоставляет бесплатные сертификаты SSL всем желающим

Использование клиента letsencrypt в дистрибутиве Fedora

Официальный клиент letsencrypt может быть установлен в Fedora 23 и более новых версиях дистрибутива с помощью следующей команды:

dnf install letsencrypt

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

  • Подтверждение в ручном режиме: файлы сертификата должны размещаться в соответствующей директории веб-сервера силами его администратора.
  • Подтверждение силами клиента: клиент LetsEncrypt принимает соединения от сервера на портах 80 и 443 и самостоятельно взаимодействует с ним.
  • Подтверждение путем создания файлов в корневой директории веб-сервера: клиент получает информацию о корневой директории веб-сервера (например, /var/www/html) и самостоятельно создает в ней все необходимые файлы.

На момент написания статьи инструменты для полностью автоматизированной настройки веб-серверов Apache и nginx находятся в разработке.

После окончания процесса установки упомянутого пакета программного обеспечения у вас появится возможность ознакомления с полным списком поддерживаемых клиентом аргументов командной строки благодаря наличию поддержки аргумента --help:

letsencrypt --help all

Подтверждение прав владения доменом в ручном режиме

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

По умолчанию клиент использует интерфейс на основе библиотеки ncurses, но он также может работать в обычном текстовом режиме:

$ letsencrypt --text --email recovery@example.com \
--domains www.example.com,example.com,foo.example.com \
--agree-tos --renew-by-default --manual certonly

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

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

После исполнения данной команды клиент попросит вас создать файл с секретными данными по заданному пути. Выполните следующие команды для генерации этого файла (замените "somethingrandomgivenbyservergoeshere" на выданные клиентом секретные данные, а "anotherrandomthinghere" - на выданное клиентом имя файла).

$ cd /var/www/html
$ mkdir -p .well-known/acme-challenge
$ echo "somethingrandomgivenbyservergoeshere" > .well-known/acme-challenge/anotherrandomthinghere

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

Подтверждение прав владения доменом силами клиента

Данный метод подтверждения прав владения доменом позволяет выполнять все описанные выше действия в автоматическом режиме, который обуславливает возможность полной автоматизации процесса обновления сертификата. Его недостатком является необходимость временной остановки основного веб-сервера для того, чтобы клиент LetsEncrypt мог запустить свой встроенный HTTP-сервер и передать секретные данные основному серверу проекта.

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

$ letsencrypt --text --renew-by-default --email recovery@example.com \
--domains www.example.com,example.com,foo.example.com \
--agree-tos --standalone --standalone-supported-challenges http-01 certonly

Со стороны пользователя не требуется никаких действий. Данный метод подтверждения прав владения доменом может использоваться в автоматическом режиме при условии наличия свободного порта 80 или 443, а также тогда, когда допустим небольшой период бездействия веб-сервера. Например, он может использоваться на этапе начальной настройки перед запуском основного веб-сервера в случае работы с такой автоматизированной системой управления, как Ansible.

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

Подтверждение прав владения доменом путем создания файлов в корневой директории веб-сервера

Данный метод является удобным компромиссом. В том случае, если существующий веб-сервер обслуживает клиентов, клиент LetsEncrypt может получить от пользователя путь к его корневой директории и автоматически создать файл с секретными данными для сервера ACME. Данный метод подтверждения прав владения доменом также предполагает отправку запроса с IP-адреса, соответствующего IP-адресу, который приведен в записи A указанного домена.

$ letsencrypt --text --renew-by-default --email recovery@example.com \
--domains www.example.com,example.com,foo.example.com \
--agree-tos --webroot --webroot-path /var/www/html certonly

Подтверждение прав владения доменом путем создания файлов в корневой директории веб-сервера

Использование сертификата LetsEncrypt

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

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

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

$ ln -s /etc/letsencrypt/live/www.example.com/cert.pem /etc/pki/tls/certs/www.example.com.crt
$ ln -s /etc/letsencrypt/live/www.example.com/chain.pem /etc/pki/tls/certs/www.example.com.chain.crt
$ ln -s /etc/letsencrypt/live/www.example.com/privkey.pem /etc/pki/tls/private/www.example.com.key
$ cp /etc/httpd/conf.d/ssl.conf{,.backup}
$ sed -i 's@\(SSLCertificateFile\) .*@\1 /etc/pki/tls/certs/www.example.com.crt@' /etc/httpd/conf.d/ssl.conf
$ sed -i 's@\(SSLCertificateKeyFile\) .*@\1 /etc/pki/tls/private/www.example.com.key@' /etc/httpd/conf.d/ssl.conf
$ sed -i 's@#\(SSLCertificateChainFile\) .*@\1 /etc/pki/tls/certs/www.example.com.chain.crt@' /etc/httpd/conf.d/ssl.conf

После перезапуска веб-сервера он должен использовать сгенерированный сертификат.

Для файлов сертификатов из используемой по умолчанию директории устанавливается контекст SELinux etc_t. Они могут читаться серверами httpd и nginx, поэтому описанная конфигурация будет вполне работоспособной. Однако, пока в базовом наборе политик SELinux не реализовано поддержки контекста для сертификатов LetsEncrypt, имеет смысл установить подходящий контекст для файлов сертификата вручную, чтобы предотвратить любые злонамеренные действия.

$ semanage fcontext -a -t cert_t '/etc/letsencrypt/(archive|live)(/.*)?'
$ restorecon -Rv /etc/letsencrypt

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

Срок действия выдаваемых сертификатов ограничивается 90 днями для того, чтобы сертификаты, выданные недобросовестным пользователям, становились недействительными максимально быстро. Также ведутся дискуссии о сокращении срока действия сертификатов в будущем. Разумеется, разработчики предполагают, что пользователи будут автоматизировать процесс получения сертификатов и обновлять их через каждые 30 или 60 дней для того, чтобы постоянно использовать свежий сертификат, действительный в течение 90 дней.

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

Файлы в поддиректории live являются всего лишь символьными ссылками на текущие версии соответствующих файлов из поддиректории /etc/letsencrypt/archive. Они позволяют отслеживать историю обновления версий сертификатов и осуществлять откаты обновлений при необходимости.

$ ls -1 /etc/letsencrypt/archive/www.example.com
 cert1.pem
 cert2.pem
 chain1.pem
 chain2.pem
 fullchain1.pem
 fullchain2.pem
 privkey1.pem
 privkey2.pem

$ ls -lGg /etc/letsencrypt/live/www.example.com
 lrwxrwxrwx. 1 41 Dec 2 23:19 cert.pem -> ../../archive/www.example.com/cert2.pem
 lrwxrwxrwx. 1 42 Dec 2 23:19 chain.pem -> ../../archive/www.example.com/chain2.pem
 lrwxrwxrwx. 1 46 Dec 2 23:19 fullchain.pem -> ../../archive/www.example.com/fullchain2.pem
 lrwxrwxrwx. 1 44 Dec 2 23:19 privkey.pem -> ../../archive/www.example.com/privkey2.pem

Для использования новых версий файлов следует просто перезапустить веб-сервер. Если вы используете метод подтверждения прав владения доменом, который не требует взаимодействия с веб-сервером, такой, как метод подтверждения путем создания файлов в корневой директории веб-сервера, это процесс может быть автоматизирован с помощью задачи cron или таймера systemd.

Пример создания таймера systemd:

Отзыв сертификата

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

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

$ letsencrypt revoke --cert-path /etc/letsencrypt/archive/www.example.com/cert1.pem

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

Заключительные слова

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

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


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют