Let's Encrypt

Материал из CADR
Версия от 21:44, 14 июня 2016; Avp (обсуждение | вклад) (Gentoo Way: Добавил упоминание certbot'а)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Клиенты

Взаимодействие с сервером Let's Encrypt происходит посредством протокола ACME. Кроме официального клиента letsencrypt существует большое количество сторонних реализаций. Список клиентов Let's Encrypt можно посмотреть на странице List of Client Implementations.

Пример использования

Здесь мы рассмотрим получение сертификата через клиент le, написанный на Bash.

Предполагается, что сервер работает под Ubuntu 14.04, используется nginx в качестве web-сервера, и действия выполняются от root'а.

Во-первых, мы должны склонировать репозиторий -- допустим, в каталог /opt/le:

 $ git clone https://github.com/Neilpang/le.git /opt/le

Далее необходимо выполнить установку:

 $ cd /opt/le
 $ ./le.sh install

Установщик создаёт каталог ~/.le и копирует в него le.sh, создаёт символьную ссылку /bin/le -> ~/.le/le.sh и добавляет в cron текущего пользователя (в нашем случае, root'а) задание по проверке сертификата и обновления его, если это требуется.

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

 # Название домена, для которого необходим сертификат:
 $ export DOMAIN=example.ru
 # Длина ключа:
 $ export KEY_LEN=2048
 # Путь к файлу сертификата (публичного ключа):
 $ export CERT_FILE_PATH=/etc/ssl/certs/${DOMAIN}.cert
 # Путь к файлу (закрытого) ключа:
 $ export KEY_FILE_PATH=/etc/ssl/private/${DOMAIN}.key
 # Путь к сертификату центра сертификации Let's Encrypt:
 $ export CA_CERT_FILE_PATH=/etc/ssl/certs/ca-letsencrypt.cert
 # Команда перезапуска web-сервера (выполняется после обновления
 # сертификата, скажем, по cron'у):
 $ export RELOAD_CMD="service nginx restart"
 $ le issue no \
     $DOMAIN $DOMAIN $KEY_LEN \
     $CERT_FILE_PATH \
     $KEY_FILE_PATH \
     $CA_CERT_FILE_PATH \
     $RELOAD_CMD

Таким образом, после работы программы мы получим три файла:

  • В каталоге /etc/ssl/certs/ -- подписанный публичный ключ (сертификат) example.ru.cert и публичный ключ (сертификат) центра сертификации ca-letsencrypt.cert.
  • В каталоге /etc/ssl/private/ -- приватный (закрытый) ключ example.ru.key.

Также эти ключи находятся в каталоге ~/.le, откуда они и копируются в вышеуказанные каталоги.

Gentoo Way

  • С недавних пор официальный клиент Let's Encrypt переименован в certbot -- см. пакет app-crypt/certbot в портежах. -- Avp (обсуждение) 21:44, 14 июня 2016 (UTC)

Здесь мы рассмотрим установку и использование официальной утилиты letsencrypt на Hardened Gentoo GNU/Linux и web-сервером lighttpd.

Как будет видно далее, "особенностей" при установке обнаруживается не так много, и даже не нужно отключать SELinux. Начнём с того, что в случае с Gentoo в портежах уже есть все необходимые утилиты, так что шаг "ожидание ebuild'ов" можно пропустить:

$ eix letsencrypt
[I] app-crypt/letsencrypt
     Available versions:  (~)0.4.2 **9999 {test PYTHON_TARGETS="python2_7"}
     Installed versions:  0.4.2(21:49:00 03/10/16)(-test PYTHON_TARGETS="python2_7")
     Homepage:            https://github.com/letsencrypt/letsencrypt https://letsencrypt.org/
     Description:         Let's encrypt client to automate deployment of X.509 certificates

* app-crypt/letsencrypt-apache
     Available versions:  **9999 {test PYTHON_TARGETS="python2_7"}
     Homepage:            https://github.com/letsencrypt/letsencrypt https://letsencrypt.org/
     Description:         Apache plugin for letsencrypt

Found 2 matches.

Ставится стандартным способом:

 $ emerge -aq --autounmask-write letsencrypt

"Размаскируем" пакет и предложенные зависимости (к примеру, через etc-update), запускаем приведённую выше команду по-новой, ждём установки. Пакет поставит за собой необходимые зависимости (к примеру, app-crypt/acme.)

Останавливаем web-сервер (в моём случае, lighttpd), чтобы освободить порт 80:

 $ rc-config stop lighttpd

Запускаем операцию получения ключа:

 $ letsencrypt certonly

и отвечаем на задаваемые утилитой вопросы. Данная команда выполнит только операцию получения сертификата, без его установки в web-сервер. Ключи будут сохранены в каталог /etc/letsencrypt/archive/example.org, симлинки на них брошены в /etc/letsencrypt/live/example.org.

Для lighttpd придётся сделать дополнительный шаг: склеить приватный ключ и публичный сертификат в один файл:[1]

 $ cd /etc/letsencrypt/archive/example.org/
 $ cat privkey1.pem cert1.pem > ssl1.pem
 $ ln -s /etc/letsencrypt/archive/example.org/ssl1.pem /etc/letsencrypt/live/example.org/

Далее прописываем путь к вашему ключу в конфигурационный файл lighttpd. К примеру, кусок /etc/lighttpd/lighttpd.conf:

$SERVER["socket"] == ":443" {
    ssl.engine   = "enable"                           
    ssl.pemfile  = "/etc/letsencrypt/live/example.org/ssl1.pem"
    ssl.ca-file  = "/etc/letsencrypt/live/example.org/fullchain.pem"
 }

Перезапускаем web-сервер:

 $ rc-config start lighttpd

Открываем сайт в браузере и любуемся результатом.  :-) -- Avp (обсуждение) 19:00, 14 марта 2016 (UTC)

Получение информации о подписанном сертификате

Получить информацию о подписанном сертификате можно следующим образом:

 $ openssl x509 -in $CERT_FILE_PATH -text

Сноски