Application: "Certbot client v.0.28/1.0" for "Let`s Encrypt" (on Python), "Lighttpd".
Основная инструкция по настройке "Let`s Encrypt" в спарке с web-сервером "Nginx" опубликована отдельно. Здесь рассматриваются лишь отличия от неё в плане интеграции с web-сервером "Lighttpd".
Предварительная настройка web-сервера "Lighttpd".
Считая, что локальная директория для валидационных файлов "Certbot client"-а уже создана в соответствии с основной инструкцией, описываем для web-сервера "Lighttpd" виртуальную ссылку с зарезервированным ISRG именем "/.well-known/acme-challenge/", которую связываем с локальной файловой структурой:
В "Lighttpd" блоки конфигурации подключаются поочерёдно, с переопределением в случае наложения, так постараемся параметры функциональности "Let`s Encrypt" разместить после общесистемных (обычно префикс "10-"), но до описания сайтов как таковых (префикс "99-", например):
# vi /etc/lighttpd/conf-available/20-letsencrypt.conf
# server.modules += ( "mod_alias" ) # (обычно включен по умолчанию)
alias.url += ( "/.well-known/acme-challenge/" => "/var/www/letsencrypt/.well-known/acme-challenge/" )
alias.url += ( "/.well-known/acme-challenge/" => "/var/www/letsencrypt/.well-known/acme-challenge/" )
Включаем "алиас" в глобальную конфигурацию:
# ln -s /etc/lighttpd/conf-available/20-letsencrypt.conf /etc/lighttpd/conf-enabled/20-letsencrypt.conf
В описании каждого сайта, которому требуется поддержка "Let`s Encrypt", внедряем заготовленный блок конфигурации ресурсов:
# vi /etc/lighttpd/conf-available/99-site.example.net.conf
# Захватываем запросы определённого FQDN
$HTTP["host"] =~ "(^|www\.)site\.example\.net$" {
# Возможный блок перехвата трафика HTTP и перенаправления его в HTTPS
$HTTP["scheme"] == "http" {
# Перенаправляем всё, кроме запросов "Let`s Encrypt"
$HTTP["url"] !~ "^/\.well-known/" {
$HTTP["host"] =~ ".*" {
url.redirect = ( ".*" => "https://%0$0" )
}
}
}
# Описание функциональности сайта, доступного по HTTPS
....
}
$HTTP["host"] =~ "(^|www\.)site\.example\.net$" {
# Возможный блок перехвата трафика HTTP и перенаправления его в HTTPS
$HTTP["scheme"] == "http" {
# Перенаправляем всё, кроме запросов "Let`s Encrypt"
$HTTP["url"] !~ "^/\.well-known/" {
$HTTP["host"] =~ ".*" {
url.redirect = ( ".*" => "https://%0$0" )
}
}
}
# Описание функциональности сайта, доступного по HTTPS
....
}
Проверяем синтаксическую корректность конфигурации и применяем изменения:
# lighttpd -t -f /etc/lighttpd/lighttpd.conf && systemctl restart lighttpd
Применение сертификатов "Let`s Encrypt" в web-сервисе.
Считая, что SSL-сертификаты уже запрошены в соответствии с базовой инструкцией, проведём предварительную их адаптацию к требованиям используемого web-сервера. "Lighttpd" ожидает файл SSL-сертификата, включающий сразу "закрытую" и "открытую" части, размещённые последовательно:
# cd /etc/letsencrypt/live/site.example.net
# cat ./privkey.pem ./cert.pem > ./lighttpd.pem
# cat ./privkey.pem ./cert.pem > ./lighttpd.pem
После создания дополнительного файла с SSL-сертификатами применяем таковые в конфигурации сайтов, публикуемых web-сервером "Lighttpd", примерно следующим образом:
# vi /etc/lighttpd/conf-available/99-site.example.net.conf
# Захватываем запросы определённого FQDN
$HTTP["host"] =~ "(^|www\.)site\.example\.net$" {
....
# Описание функциональности сайта, доступного по HTTPS
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
ssl.honor-cipher-order = "enable"
ssl.use-compression = "disable"
# Параметры SSL/TLS для сайта по умолчанию
ssl.dh-file = "/etc/ssl/lighttpd/dhparam-2048.pem"
ssl.ca-file = "/etc/letsencrypt/live/site.example.net/chain.pem"
ssl.pemfile = "/etc/letsencrypt/live/site.example.net/lighttpd.pem"
# Для префикса "www." указываем свой сертификат и перенаправляем на основной FQDN
$HTTP["host"] =~ "^www\.(.*)" {
ssl.ca-file = "/etc/letsencrypt/live/www.site.example.net/chain.pem"
ssl.pemfile = "/etc/letsencrypt/live/www.site.example.net/lighttpd.pem"
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
....
}
}
$HTTP["host"] =~ "(^|www\.)site\.example\.net$" {
....
# Описание функциональности сайта, доступного по HTTPS
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.use-sslv2 = "disable"
ssl.cipher-list = "ECDHE-RSA-AES256-SHA384:AES256-SHA256:RC4:HIGH:!MD5:!aNULL:!EDH:!AESGCM"
ssl.honor-cipher-order = "enable"
ssl.use-compression = "disable"
# Параметры SSL/TLS для сайта по умолчанию
ssl.dh-file = "/etc/ssl/lighttpd/dhparam-2048.pem"
ssl.ca-file = "/etc/letsencrypt/live/site.example.net/chain.pem"
ssl.pemfile = "/etc/letsencrypt/live/site.example.net/lighttpd.pem"
# Для префикса "www." указываем свой сертификат и перенаправляем на основной FQDN
$HTTP["host"] =~ "^www\.(.*)" {
ssl.ca-file = "/etc/letsencrypt/live/www.site.example.net/chain.pem"
ssl.pemfile = "/etc/letsencrypt/live/www.site.example.net/lighttpd.pem"
url.redirect = ( "^/(.*)" => "https://%1/$1" )
}
....
}
}
Проверяем синтаксическую корректность конфигурации и применяем изменения:
# lighttpd -t -f /etc/lighttpd/lighttpd.conf && systemctl restart lighttpd
Автоматизация продления сертификатов.
Общая идея и способ реализации автоматического продления сертификатов рассматривается в основной инструкции, а здесь лишь приводится специфичная для "Lighttpd" команда применения обновлённой конфигурации:
# vi /opt/eff.org/cert-renew.sh
#!/bin/bash
....
# Даём указание использующему сертификаты web-сервису принять конфигурацию
[ "${?}" -eq "0" ] && /opt/eff.org/cert-apply-lighttpd.sh
....
....
# Даём указание использующему сертификаты web-сервису принять конфигурацию
[ "${?}" -eq "0" ] && /opt/eff.org/cert-apply-lighttpd.sh
....
Скрипт адаптации набора сертификатов "Let`s Encrypt" к формату "Lighttpd" и применения таковых:
# vi /opt/eff.org/cert-apply-lighttpd.sh && chmod +x /opt/eff.org/cert-apply-lighttpd.sh
#!/bin/bash
# Обходим все директории с сертификатами "Let`s Encrypt" и создаём дополнительные для "Lighttpd"
cd /etc/letsencrypt/live
for DIR in * ; do
if [ -r "${DIR}/privkey.pem" -a -r "${DIR}/cert.pem" ] ; then
cat "${DIR}/privkey.pem" "${DIR}/cert.pem" > "${DIR}/lighttpd.pem"
chown certbot:www-data "${DIR}/lighttpd.pem"
fi
done
# Application restart
[ "${?}" -eq "0" ] && { lighttpd -t -f /etc/lighttpd/lighttpd.conf && systemctl restart lighttpd; }
exit ${?}
# Обходим все директории с сертификатами "Let`s Encrypt" и создаём дополнительные для "Lighttpd"
cd /etc/letsencrypt/live
for DIR in * ; do
if [ -r "${DIR}/privkey.pem" -a -r "${DIR}/cert.pem" ] ; then
cat "${DIR}/privkey.pem" "${DIR}/cert.pem" > "${DIR}/lighttpd.pem"
chown certbot:www-data "${DIR}/lighttpd.pem"
fi
done
# Application restart
[ "${?}" -eq "0" ] && { lighttpd -t -f /etc/lighttpd/lighttpd.conf && systemctl restart lighttpd; }
exit ${?}