Como eu configuro o letsencrypt com múltiplos domínios em um servidor lighttpd com o ubuntu 16.04?

3

Estou tentando configurar o letsencrypt no lighttpd do zero. Eu atualmente corro lighttpd em 16.10 xenial e quero passar de sites existentes para https de http. Eu sei que há um processo de configuração automática para o Apache e o ngnix, mas não estou inclinado a mudar as coisas. Tenho meia dúzia de nomes de host, em um par de domínios hospedados usando virtualhosts e com blocos individuais por host.

Como eu faria isso?

    
por Journeyman Geek 04.04.2017 / 05:56

2 respostas

1

Levou um pouco de tentativa e erro, e juntando bits de várias fontes.

Você pode querer fazer algumas coisas de maneira diferente, dependendo de suas necessidades. Nesse caso, eu não fiz algumas coisas que as pessoas incluem, e algumas coisas são opcionais.

Eu comecei com este guia , e divergiu descontroladamente

Se você deseja gerar seu próprio arquivo ssl.dh faça agora . É opcional e demora um pouco

cd /etc/ssl/certs

Então

openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096 é lento e redundante openssl dhparam -dsaparam -out etc/ssl/certs/dhparam.pem é muito mais rápido

Em seguida, instale o certbot do letsencrypt de acordo com as instruções

$ sudo add-apt-repository ppa:certbot/certbot
$ sudo apt-get update
$ sudo apt-get install certbot

Gere seus certificados. Eu escolhi ter um certificado para todos os meus hosts no domínio "example.com" em um certificado e ter "example.org" em seu próprio certificado.

certbot usa suas portas do servidor da web para desligar sua instância do lighttpd primeiro

Gerar um certificado é simplesmente uma questão de executar

certbot certonly --standalone -d example.org para um domínio e certbot certonly --standalone -d example.com -d chat.example.com para vários domínios (até 20) em um certificado.

O lighttpd espera um único arquivo pem, e o letsencrypt faz um par (inicialmente!), então você precisará mesclá-los. Vá para cd /etc/letsencrypt/live/ entrar em cada pasta e execute cat privkey.pem cert.pem > ssl.pem

Para nossos objetivos, suponhamos que você tenha arquivos em "/etc/letsencrypt/live/chat.example.com/" e "/etc/letsencrypt/live/example.org /"

Para fins de teste, suponha que você queira um desses certs como padrão, e deseja manter a porta 80 disponível para testes para ver se o servidor inicia com suas alterações.

Adicione uma leitura de bloco

$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"

}

Você pode substituir isso mais tarde, e é o mínimo e permite que você execute https ao lado de http.

Qualquer host sem um conjunto explícito de configurações conectando-se a https usará esses certificados. É um conjunto viável mínimo para testar.

Inicie o lighttpd e teste.

Agora, se você estiver sério , pode querer mais configurações, como usar a configuração ssl.dh sobre a qual falamos, e você gastou duas horas gerando um arquivo dhparam.pem no início Você pode substituir o bloco que acabou de adicionar com algo assim - isso funciona como configurações padrão para todo o servidor.

$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")
    }
}

Ele faz HTTPS com um conjunto mais completo de configurações (ajusta a gosto) e redireciona todas as conexões HTTP para HTTPS.

Se você quiser um domínio com um conjunto diferente de chaves, você pode substituir essas configurações no bloco de host.

$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"
}

Reinicie seu servidor, teste para certificar-se de que a porta 80 não é conectável e https é, e você deve ser bom.

    
por 04.04.2017 / 05:56
1

A maioria das ferramentas oferece suporte a um modo "servidor da Web estúpido", no qual eles fornecem arquivos que precisam ser atendidos pelo seu servidor da web no diretório /.well-known/acme-challenge/ .

Também é possível gerar esse conteúdo com alguma linguagem dinâmica (lua, php, ...: concat o nome do arquivo de solicitação, '.' e o hash da chave pública)

    
por 04.04.2017 / 07:39