How do I set up letsencrypt with multiple domains on a lighttpd server with ubuntu 16.04?

I'm trying to set up letsencrypt on lighttpd from scratch. I currently run lighttpd on 16.10 xenial and want to move over existing sites to https from http. I know there's an automatic setup process for Apache and ngnix, but I'm disinclined to move things over. I have half a dozen hostnames, over a pair of domains hosted using virtualhosts, and with individual blocks per host.

How would I do this?

2
задан 4 April 2017 в 06:56
2 ответа

Потребовалось немного проб и ошибок, а также объединения битов из нескольких источников.

Возможно, вы захотите сделать несколько вещей по-другому, в зависимости от ваших потребностей. В этом случае я не сделал несколько вещей, которые включают в себя люди, а некоторые из них являются необязательными.

Я начал с этого руководства и сильно расходился

Если вы хотите создать свой собственный 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 есть, и вам должно быть хорошо.

1
ответ дан 3 December 2019 в 11:29

Большинство инструментов поддерживают режим «глупого веб-сервера», в котором они предоставляют файлы, которые должны обслуживаться вашим веб-сервером в /. Well-known / acme-challenge / .

Этот контент также можно сгенерировать с помощью некоторого динамического языка (lua, php, ...:объединить имя файла запроса '.' и хэш открытого ключа)

1
ответ дан 3 December 2019 в 11:29

Теги

Похожие вопросы