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