Назад | Перейти на главную страницу

Как настроить letsencrypt с несколькими доменами на сервере lighttpd с ubuntu 16.04?

Пытаюсь настроить 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, ...: объединить имя файла запроса, '.' и хеш открытого ключа)