Let’s Encrypt сертификаты с помощью dehydrated на примере freebsd и centos

(Дополнено и исправлено 11.05.2017)
Мы уже писали о получения Letsencrypt сертификатов с использованием родного Certbot ACME клиента. Кроме него, есть некоторое количество свободных клиентов, реализующих Automatic Certificate Management Environment (ACME) протокол.
Будет рассмотрен клиент dehydrated, ранее известный как letsencrypt.sh. Он написан на bash, следовательно его код доступен большинству системных администраторов, тянет за собой совсем мало зависмоистей, прост в настройке и использовании. Кроме того, dehydrated может быть полезен как замена полноценного certbot на старых системах, например, на freebsd 9.Х.
Установка:
FreeBSD:

pkg install dehydrated

CentOS

yum install epel-release (если у Вас еще не встановлен EPEL)
yum install dehydrated

Внимание, дальше все пути мы указываем для freebsd. Для centos следует читать без начального /usr/local. Например:
Для FreeBSD работчая папка dehydrated: /usr/local/etc/dehydrated
Для CentOS рабочая папка dehydrated: /etc/dehydrated

Будет создана папка /usr/local/etc/dehydrated с примерами настроек.

Настройка dehydrated и полчение сертификатов:

Копируем /usr/local/etc/dehydrated/config.example в config и редактируем его. Нам понадолилось изменить следующее:

IP_VERSION=4
KEYSIZE="2048"
CONTACT_EMAIL=admin@bla-bla.com

Где:
— IP_VERSION — работаем по ipv4;
— KEYSIZE — размер ключа. По умолчанию тут значение 4096, но мы считаем, что без особой надобности увелчивать время загрузки страниц, дополнительно греть процессора как на строне сервера так и на строне клиента — смысла нет. Тем более, что сертификат A+ можно получить и на 2048;
— CONTACT_EMAIL — сюда нам буду приходит уведомления о скором истечении срока действия сертификатов и другая инйормация от Letsencrypt.

Создаем и редактируем файл /usr/local/etc/dehydrated/domains.txt:

bla-bla.com www.bla-bla.com
example.net www.example.net wiki.example.net

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

Изменяем настройки nginx для нужных доменов:

server {
    listen 80;
    server_name bla-bla.com;
    ...
    ...
    location /.well-known/acme-challenge/ {
        alias /usr/local/www/dehydrated/; # Это строка для freebsd
#        alias /var/www/dehydrated/;       # Эта строка для centos
    }
    ...
    ...
}

Проверяем корректность внесенных изменений:

service nginx configtest

И применяем изменения настроек nginx:

service nginx reload

Регистрируем наш акаунт:

dehydrated --register --accept-terms

Дальше, хорошо бы проверить, не ошиблись ли мы где в настройках? Для этого:
— добавляем в /usr/local/etc/dehydrated/config строку:

CA="https://acme-staging.api.letsencrypt.org/directory"

— и вперед:

dehydrated -c

Если есть ошибки, исправляем их, повторяем запрос. Поле успешного прохождения проверок, в /usr/local/etc/dehydrated/config ремим строку:

#CA="https://acme-staging.api.letsencrypt.org/directory"

Удаляем тестовые сертификаты и все остальное в папке /usr/local/etc/dehydrated/certs
И точно так же выполняем запрос на получение «боевых» сертификатов:

dehydrated -c

Настройка nginx:

Тут мы приводим один из возможных вариантов настроки.
/usr/local/etc/nginx/nginx.conf — общие настройки ssl для всех сайтов:

...
...
http {
    ...
    ...
    # --- TLS ---
    ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:RSA+3DES:!NULL:!RC4;
    ssl_prefer_server_ciphers on;
    ssl_session_cache   shared:SSL:4m;
    ssl_session_timeout 10h;
    resolver 127.0.0.1;
    #--- end TLS ---
    ...
    ...
    # Тут настройки конкретных сайтов:
    include /usr/local/etc/nginx/Includes/*.conf;
}

И пример для конкретного сайта:

server {
    listen 80;
    server_name bla-bla.com www.bla-bla.com;

    location /.well-known/acme-challenge/ {
        alias /usr/local/www/dehydrated/;
    }
    location / {
        rewrite ^(.*)$ https://bla-bla.com$1 permanent;
    }
}
server {
    listen      443 ssl;
    server_name bla-bla.com;

    ssl_certificate     /usr/local/etc/dehydrated/certs/bla-bla.com/fullchain.pem;
    ssl_certificate_key /usr/local/etc/dehydrated/certs/bla-bla.com/privkey.pem;
    ssl_stapling on;
    ssl_stapling_verify on;
    add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
    
    ...
    ...
}

Проверка корректности настроек.

Для этого используем:
Проверка корректности цепочки сертификатов, SSL Checker
SSL Server Test от SSL Labs

Настройка обновления сертификатов.

Не мудрствуя лукаво, настраиваем выполнение запроса на обновления сертификатов, например, раз в неделю:
crontab

32 4 * * 0  root /usr/local/bin/dehydrated -c && service nginx reload

Вроде, все. Всем сертификатов не ниже A+.

Запись опубликована в рубрике Записки админа. Добавьте в закладки постоянную ссылку.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *