Получение сертификата через общедоступный удостоверяющий центр LetsEncrypt |
[исправить] |
Удостоверяющий центр LetsEncrypt контролируется сообществом и позволяет
любому желающему бесплатно получить TLS-сертификат для организации доступа
через защищённое соединение к своему сайту. Для прохождения верификации перед
получением сертификата достаточно продемонстрировать контроль над доменом через
размещения файла с ключом на web-сервере или запуска специального
автоматизированного крипта.
Инструментарий для верификации домена и управления сертификатами можно загрузить с сайта проекта:
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto --help
или установить готовые пакеты для Fedora 23:
dnf install letsencrypt
Основные методы верификации:
1. Ручной метод: генерация кода подтверждения и его копирование на web-сервер.
Генерируем проверочный код:
letsencrypt --text --email [email protected] --domains www.example.com,example.com,foo.example.com --agree-tos --renew-by-default --manual certonly
Записываем полученный код на web-сервер в файл
.well-known/acme-challenge/anotherrandomthinghere, относительно корня сайта:
cd /var/www/html
mkdir -p .well-known/acme-challenge
echo "224234fSDFSF23SFADASD" > .well-known/acme-challenge/anotherrandomthinghere
2. Самодостаточная проверка: на время проверки letsencrypt берёт на себя
функции http-сервера, связанного с верифицируемым доменом (хост, на который
указывает "A" запись в DNS), и напрямую отвечает на запросы сервиса. На
сервере, где будет обслуживаться домен запускаем (http-сервер сайта должен быть
отключен, метод подходит для начальной конфигурации ещё не введённых в строй сайтов):
letsencrypt --text --renew-by-default --email [email protected] --domains www.example.com,example.com,foo.example.com --agree-tos --standalone --standalone-supported-challenges http-01 certonly
3. Проверка через автоматизированное создание файлов к корне web-сервера. На
сервере, где работает сайт проверяемого домена, запускаем (/var/www/html - путь
к корню сайта, относительно которого будут временно размещены коды для верификации):
letsencrypt --text --renew-by-default --email [email protected] --domains www.example.com,example.com,foo.example.com --agree-tos --webroot --webroot-path /var/www/html certonly
При выполнении автоматизированной проверки от пользователя root готовые
сертификаты будут скопированы в директорию /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-контексте cert_t:
semanage fcontext -a -t cert_t '/etc/letsencrypt/(archive|live)(/.*)?'
restorecon -Rv /etc/letsencrypt
По умолчанию время жизни сертификата LetsEncrypt составляет 90 дней, что
требует настройки автоматизации обновления сертификата. Например, раз в 60 дней
через cron можно вызывать скрипт, который будет продлевать сертификат на
очередные 90 дней:
/usr/bin/letsencrypt -d www.example.com --renew-by-default -m [email protected] --agree-tos -t --webroot -w /var/www/html certonly
Пример unit-файла /etc/systemd/system/www-example-com-renewal.service для обновления сертификатов:
[Unit]
Description=Automatically renew the www.example.com certificate
[Service]
Type=oneshot
ExecStart=/usr/bin/letsencrypt -d www.example.com --renew-by-default -m [email protected] --agree-tos -t --webroot -w /var/www/html certonly
ExecStart=/usr/sbin/systemctl reload httpd
Файл автозапуска /etc/systemd/system/www-example-com-renewal.timer:
[Unit]
Description=Trigger an automatic renewal every month
[Timer]
OnCalendar=monthly
Persistent=true
[Install]
WantedBy=multi-user.target
В случае необходимости отзыва сертификата, например, после утечки закрытых
ключей, можно выполнить команду:
letsencrypt revoke --cert-path /etc/letsencrypt/archive/www.example.com/cert1.pem
Для упрощения работы с сервисом можно использовать скрипт-обвязку https://github.com/lukas2511/letsencrypt.sh
|
|
|
|
Раздел: Корень / Безопасность / Шифрование, PGP |
1.2, Аноним (-), 14:45, 15/12/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
> ExecStart=/usr/bin/letsencrypt -d www.example.com --renew-by-default -m recovery@example.com --agree-tos -t --webroot -w /var/www/html certonly
Есть же letsencrypt-renewer, который обновляет все сертификаты согласно конфигам /etc/letsencrypt/renewal/*.conf
| |
1.3, CHERTS (??), 08:12, 16/12/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Для автоматизации гораздо удобнее создать общий файл настроек webroot.ini вида:
authenticator = webroot
server = https://acme-v01.api.letsencrypt.org/directory
text = True
agree-tos = True
renew-by-default = True
email = admin@domain.ru
и вызывать
./letsencrypt-auto --config webroot.ini --webroot-path /var/www/example.com -d example.com certonly
| |
1.5, Аноним (5), 09:59, 24/12/2015 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Есть проблема: при исрользовании --web-root невозможно валидировать домен по https. Т.е. если сайт доступен только по https его приходится останавливать и использовать --standalone --standalone-supported-challenges tls-sni-01.
Неудобненько.
| |
1.6, himiq (?), 12:45, 24/01/2016 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
А есть ли способ обойти невозможность работы с их сертификатами в старых браузерах ? в Windows XP Chrome, например
| |
|