Пытаюсь настроить letsencrypt на lighttpd с нуля. В настоящее время я запускаю lighttpd на xenial 16.10 и хочу переместить существующие сайты на https с http. Я знаю, что для Apache и ngnix существует автоматический процесс установки, но я не склонен что-то менять. У меня есть полдюжины имен хостов на паре доменов, размещенных с использованием виртуальных хостов, и с отдельными блоками на хост.
Как бы я это сделал?
Потребовалось немного проб и ошибок, а также собрать воедино фрагменты из нескольких источников.
Возможно, вы захотите сделать несколько вещей по-другому, в зависимости от ваших потребностей. В этом случае я нет сделал кое-что, что включают люди, а кое-что не является обязательным.
Я начал с этого руководство, и разошлись дико
Если вы хотите сгенерировать собственный ssl.dh-файл сделай это сейчас. Это необязательно и занимает некоторое время
cd /etc/ssl/certs
затем
openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
медленно, и несколько избыточный openssl dhparam -dsaparam -out etc/ssl/certs/dhparam.pem
намного быстрее
Затем установите certbot letsencrypt в соответствии с инструкции
$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot
Создайте свои сертификаты. Я решил иметь один сертификат для всех моих хостов в домене «example.com» на одном сертификате и иметь «example.org» на собственном сертификате.
certbot использует порты вашего веб-сервера, поэтому неисправность сначала ваш экземпляр lighttpd
Создание сертификата - это просто вопрос запуска
certbot certonly --standalone -d example.org
для одного домена и certbot certonly --standalone -d example.com -d chat.example.com
для нескольких доменов (до 20) в сертификате.
lighttpd ожидает один pem-файл, а letsencrypt создает пару (изначально!), поэтому вам нужно их объединить. Перейти к cd /etc/letsencrypt/live/
зайти в каждую папку и запустить cat privkey.pem cert.pem > ssl.pem
Для наших целей предположим, что у вас есть файлы в "/etc/letsencrypt/live/chat.example.com/" и "/etc/letsencrypt/live/example.org/".
В целях тестирования предположим, что вы хотите использовать один из этих сертификатов по умолчанию, и вы хотите, чтобы порт 80 оставался доступным для тестирования, чтобы увидеть, запускается ли сервер с вашими изменениями.
Добавить чтение блока
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/chat.example.com/ssl.pem"
ssl.ca-file = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"
}
Вы можете заменить его позже, это самый минимум, позволяющий запускать https вместе с http.
Эти сертификаты будет использовать любой хост без явного набора настроек, подключенный к https. Это минимальный жизнеспособный набор для тестирования.
Запустите lighttpd и проверьте.
Теперь, если ты серьезный вам может потребоваться больше настроек, например, использование того параметра ssl.dh, о котором мы говорили, и вы потратили два часа на создание файла dhparam.pem с самого начала. Вы можете заменить только что добавленный блок чем-то вроде этого - это действует как настройки по умолчанию для всего сервера.
$SERVER["socket"] == ":443" {
ssl.engine = "enable"
ssl.pemfile = "/etc/letsencrypt/live/chat.example.com/ssl.pem"
ssl.ca-file = "/etc/letsencrypt/live/chat.example.com/fullchain.pem"
ssl.dh-file = "/etc/ssl/certs/jmg2dhparam.pem"
ssl.ec-curve = "secp384r1"
ssl.honor-cipher-order = "enable"
ssl.cipher-list = "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH"
ssl.use-compression = "disable"
}
$HTTP["scheme"] == "http" {
# capture vhost name with regex conditiona -> %0 in redirect pattern
# must be the most inner block to the redirect rule
$HTTP["host"] =~ ".*" {
url.redirect = (".*" => "https://%0$0")
}
}
Он выполняет HTTPS с более полным набором настроек (настраивается по вкусу) и перенаправляет любые HTTP-соединения на HTTPS.
Если вам нужен домен с другим набором ключей, вы можете переопределить эти настройки в блоке хоста.
$HTTP["host"] =~ "(^|\.)example\.org$" {
server.document-root = "/var/www/example"
server.errorlog = "/var/log/lighttpd/example/error.log"
accesslog.filename = "/var/log/lighttpd/example/access.log"
server.error-handler-404 = "/e404.php"
ssl.pemfile = "/etc/letsencrypt/live/example.org/ssl.pem"
ssl.ca-file = "/etc/letsencrypt/live/example.org/fullchain.pem"
}
Перезагрузите сервер, проверьте, что порт 80 не может быть подключен, а https есть, и все должно быть в порядке.
Большинство инструментов поддерживают режим «глупого веб-сервера», в котором они предоставляют файлы, которые должны обслуживаться вашим веб-сервером в /.well-known/acme-challenge/
каталог.
Также возможно сгенерировать этот контент с помощью некоторого динамического языка (lua, php, ...: объединить имя файла запроса, '.'
и хеш открытого ключа)