UMGUM.COM 

Let‘s Encrypt + Lighttpd ( Настройки подсистемы получения и автоматического обновления сертификатов "Let's Encrypt" для web-сервера "Lighttpd". )

7 октября 2019  (обновлено 9 января 2020)

OS: "Linux Debian 8/9/10", "Linux Ubuntu 16/18 LTS".
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/" )

Включаем "алиас" в глобальную конфигурацию:

# 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
  ....
}

Проверяем синтаксическую корректность конфигурации и применяем изменения:

# 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

После создания дополнительного файла с 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" )
    }

    ....
  }
}

Проверяем синтаксическую корректность конфигурации и применяем изменения:

# 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
....

Скрипт адаптации набора сертификатов "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 ${?}


Заметки и комментарии к публикации:


Оставьте свой комментарий ( выразите мнение относительно публикации, поделитесь дополнительными сведениями или укажите на ошибку )