Дружим Let's Encrypt и Lighttpd за 5 минут!
К сожалению web-сервер Lighttpd не такой популярный, как Apache или Nginx и некоторые скрипты "из коробки" на нём не работают. Чтож, исправим это и подружим его с сертификатами от Let's Encrypt.
Для начала надо скачать бота для автоматического скачивания и обновления сертификатов. Для этого идём по адресу https://certbot.eff.org/, в поле I'm using выбираем None of the above и в поле System свою систему и качаем/ставим пакет. Либо качаем бинарник ручками и даём права на исполнение:
cd /usr/bin wget https://dl.eff.org/certbot-auto chmod a+x certbot-auto
Запускаем первый раз бота и отвечаем на его вопросы:
certbot-auto certonly --webroot -w /var/www/example.org/ -d example.org -d www.example.org -d files.example.org
Ключ -w указывает на корень сайта. В нем бот создаст временные папки и файлы для подтверждения домена. Ключи -d указывают домены, для которых необходимо генерировать сертификат. Самый простой вариант пройти валидацию доменов - это добавить их в конфиг Lighttpd. Для этого создадим временный каталог и файл-заглушку:
mkdir /var/www/example.org.tmp echo 'OK!' > /var/www/example.org.tmp/index.html
Добавляем в /etc/lighttpd/lighttpd.conf строки:
$HTTP["host"] =~ "^example.org|^files.example.org|^www.example.org" { evhost.path-pattern = "/var/www/example.org.tmp" index-file.names = ( "index.html" ) }
Обратите внимание, что при этом необходимо подключить модуль mod_evhost. После этого перезапускаем Lighttpd командой:
service lighttpd restart
Пробуем браузером зайти на все указанные адреса. При этом мы должны увидить слово 'OK'. После успешной валидации доменов, сертификаты будут сгенерированы и помещены в папку /etc/letsencrypt/live/example.org/. Приступим к подготовке сертификатов под наш web-сервер. Для этого создадим pem-файл:
cd /etc/letsencrypt/live/example.org/ cat privkey.pem cert.pem > pemfile.pem
Добавим сертификаты в конфиг Lighttpd и получаем нечто такое:
$HTTP["host"] =~ "^example.org|^files.example.org|^www.example.org" { evhost.path-pattern = "/var/www/example.org.tmp" index-file.names = ( "index.html" ) # Сертификаты $SERVER["socket"] == "example.org:443" { ssl.engine = "enable" ssl.pemfile = "/etc/letsencrypt/live/example.org/pemfile.pem" ssl.ca-file = "/etc/letsencrypt/live/example.org/fullchain.pem" server.name = "example.org" } # Включаем переадресацию с http на https # Не забываем перед этим подключить модуль mod_redirect $HTTP["scheme"] == "http" { $HTTP["host"] =~ ".*" { url.redirect = (".*" => "https://%0$0") } } }
Перезапускаем Lighttpd командой:
service lighttpd restart
Пробуем зайти браузером зайти на любой из указанных адресов. Должно срабатывать автоматическое переключение с http на https и на всех адресах должна показываться иконка шифрованного соединения. Осталось сменить в конфиге путь временного сайта на постоянный и добавить в crontab скрипт автообновления сертификатов:
#!/bin/sh PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin certbot-auto renew --quiet --no-self-upgrade cd /etc/letsencrypt/live/example.org/ cat privkey.pem cert.pem > pemfile.pem service lighttpd restart
Вот и всё. Есть вопросы - есть контакты