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.