Не так давно, центр сертификации Let’s Encrypt вышел на стадию открытого тестирования и стал доступен всем желающим, о чем мы уже писали в нашем блоге «Центр сертификации Let’s Encrypt – запущен в открытое тестирование«.
Сегодня же мы попробуем получить сертификаты для наших доменов и автоматизировать авто продление сертификатов.
Справка: Для тех кто не в курсе, Let’s Encrypt выдает сертификаты всего на 90 дней, после чего их необходимо обновить, иначе они станут не действительными.
Установка Let’s Encrypt
Перовое что нам необходимо сделать, это получить скрипты управления Let’s Encrypt. Мы используем Debian Wheezy, поэтому самый простой и универсальный способ для нас, это получить скрипты из репозитория Let’s Encrypt.
1 2 3 |
# sudo aptitude install git # git clone https://github.com/letsencrypt/letsencrypt # cd ./letsencrypt |
После чего нужно выполнить установку, для того чтобы letsencrypt до установил нужные зависимости:
1 |
# ./letsencrypt-auto |
Если у Вас Debian Stretch или Debian Sid, то вы можете установить пакеты Let’s Encrypt:
1 |
# sudo aptitude install letsencrypt |
Получение сертификатов
Первое что мы рекомендуем сделать, это ознакомиться со справкой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# ./letsencrypt-auto --help letsencrypt [SUBCOMMAND] [options] [-d domain] [-d domain] ... The Let's Encrypt agent can obtain and install HTTPS/TLS/SSL certificates. By default, it will attempt to use a webserver both for obtaining and installing the cert. Major SUBCOMMANDS are: (default) run Obtain & install a cert in your current webserver certonly Obtain cert, but do not install it (aka "auth") install Install a previously obtained cert in a server revoke Revoke a previously obtained certificate rollback Rollback server configuration changes made during install config_changes Show changes made to server config during installation plugins Display information about installed plugins Choice of server plugins for obtaining and installing cert: --apache Use the Apache plugin for authentication & installation --standalone Run a standalone webserver for authentication (nginx support is experimental, buggy, and not installed by default) --webroot Place files in a server's webroot folder for authentication OR use different plugins to obtain (authenticate) the cert and then install it: --authenticator standalone --installer apache More detailed help: -h, --help [topic] print this message, or detailed help on a topic; the available topics are: all, automation, paths, security, testing, or any of the subcommands or plugins (certonly, install, nginx, apache, standalone, webroot, etc) |
Более развернутую справку можно посмотреть командой ./letsencrypt-auto —help all.
Мы будем только генерировать сертификаты, без каких либо установок. Для этого мы будем использовать под команду certonly. Опция —apache нам не подходит, поэтому будем использовать опции —standalone или —webroot. При использовании опции —standalone необходимо останавливать сервер.
Для получения сертификата мы будем использовать опцию —webroot:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# ./letsencrypt-auto certonly --webroot -w /home/nahoste.ru/http/ --email webmaster@nahoste.ru -d nahoste.ru -d www.nahoste.ru Updating letsencrypt and virtual environment dependencies...... Requesting root privileges to run with virtualenv: ./letsencrypt/bin/letsencrypt certonly --webroot -w /home/nahoste.ru/http/ --email webmaster@nahoste.ru -d nahoste.ru -d www.nahoste.ru IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/nahoste.ru/fullchain.pem. Your cert will expire on 2016-03-27. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - 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 |
Кратко пробежимся по опциям:
- -w / —webroot-path — путь к web директории, важно помнить, что при указании нескольких опций -w использоваться будет последняя
- —email — контактный адрес для восстановления
- -d — домен, возможно указать несколько доменов сразу (пример … -d nahoste.ru -d www.nahost.ru)
Настройка NGINX
Теперь когда мы получили сертификаты, перейдем к настройке nginx. Для удобства я создам шаблон конфигурации для ssl доменов:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
# nano /etc/nginx/conf.d/ssl.conf # Задаём таймаут, в течение которого keep-alive соединение с клиентом не будет закрыто со стороны сервера keepalive_timeout 70; # Задаем разделяемый кэш SSL 10m байт ssl_session_cache shared:SSL:10m; # Время повторного использования параметров сессии из кэша. ssl_session_timeout 5m; # Указанные протоколы, ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Описывает разрешённые шифры ssl_ciphers 'HIGH:!aNULL:!MD5:!kEDH'; # Указывает, чтобы при использовании протоколов SSLv3 и TLS серверные шифры более приоритетные, чем клиентские. ssl_prefer_server_ciphers on; # Diffie–Hellman key для шифров с обменом EDH-ключами # openssl dhparam -out dhparam.pem 2048 ssl_dhparam /etc/nginx/dhparam.pem; # При ответах 200, 201, 204, 206, 301, 302, 303, 304 или 307, говорим что мы хотим защищенного соединения, с максимальным сроком 30 дней add_header Strict-Transport-Security max-age=2592000; # Разрешаем прикрепление OCSP-ответов сервером ssl_stapling on; # Разрешаем проверку сервером ответов OCSP ssl_stapling_verify on; # Задаём серверы DNS, используемые для преобразования имён вышестоящих серверов в адреса и время кэширования ответов в 1 сутки resolver 8.8.8.8 8.8.4.4 valid=86400; # Задаём таймаут для преобразования имени в адрес resolver_timeout 10; |
Теперь настроим наш виртуальный хост:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
server { server_name nahoste.ru; root /home/nahoste.ru/http/; # Говорим слушать соединения на 443 порту по SSL с использованием SPDY listen 443 ssl spdy; # Указываем файлы с сертификатом, ключом сертификата и траст сертификата, созданные при помощи letsencrypt ssl_certificate /etc/letsencrypt/live/nahoste.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/nahoste.ru/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/nahoste.ru/chain.pem; access_log /home/nahoste.ru/logs/http-access-nahoste.ru.log; error_log /home/nahoste.ru/logs/http-error-nahoste.ru.log; location ~ \.php$ { fastcgi_pass unix:/home/nahoste.ru/tmp/nahoste.ru.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } include /etc/nginx/conf.d/default; # Добавляем наши параметры для работы ssl include /etc/nginx/conf.d/ssl; } |
После настройки пере запускаем nginx и смотрим что получилось:
Также смотрим что нам покажет SSL Server Test:
Обновление сертификата
Обновление сертификата происходит аналогично его получению:
1 |
# ./letsencrypt-auto certonly --webroot -w /home/nahoste.ru/http/ --email webmaster@nahoste.ru -d nahoste.ru -d www.nahoste.ru --renew-by-default |
Опция —renew-by-default автоматизирует процесс обновления, благодаря ей мы автоматически говорим, что нам нужно обновить сертификаты.
Автоматизация обновления сертификата Lets Encrypt
Для автоматизации достаточно поместить команду обновления сертификата в crontab:
1 2 3 4 5 |
#!/bin/sh - # Пример для --standalone обновления service nginx stop /home/letsencrypt/letsencrypt-auto certonly --standalone -d nahoste.ru -d www.nahoste.ru -m webmaster@nahoste.ru --renew-by-default service nginx start |
1 2 3 |
#!/bin/sh - # Пример для --webroot обновления /home/letsencrypt/letsencrypt-auto certonly --webroot -w /home/nahoste.ru/http/ --email webmaster@nahoste.ru -d nahoste.ru -d www.nahoste.ru --renew-by-default |
Добавить комментарий