bg-tutorials

Como Gerar um CSR no lighttpd

Este tutorial mostra como gerar um CSR no lighttpd usando a linha de comando do OpenSSL no mesmo servidor que executa o servidor web lighttpd. Você criará dois ficheiros num único comando: uma nova chave privada e o CSR (Certificate Signing Request) correspondente, que submete à sua Autoridade Certificadora.

Os passos abaixo funcionam em todas as distribuições Linux modernas que empacotam o lighttpd (Debian, Ubuntu, RHEL, AlmaLinux, Rocky Linux, Fedora, openSUSE, Alpine), já que cada uma vem com o OpenSSL 1.1.1 ou OpenSSL 3.x. Ambas as versões assinam o pedido com SHA-256 por padrão, portanto não precisa adicionar nenhuma flag de digest. O mesmo comando também funciona no FreeBSD e no macOS com lighttpd.

Passo 1: Conecte-se ao seu servidor lighttpd

Abra o Terminal no macOS ou Linux, ou o PowerShell ou Windows Terminal no Windows, e conecte-se ao servidor via SSH. Substitua o nome de utilizador e o host pelos seus:

ssh your-user@your-lighttpd-server

Gere o CSR no mesmo servidor que irá hospedar o certificado. A chave privada é criada junto do CSR e deve permanecer nesse servidor, portanto executar o comando no seu portátil e depois copiar a chave para outro lado anula o propósito. Também pode ser útil trabalhar num diretório dedicado que consiga localizar facilmente mais tarde, por exemplo:

sudo mkdir -p /etc/lighttpd/ssl
cd /etc/lighttpd/ssl

Passo 2: Gere a chave privada e o CSR

Se já gerou o seu CSR com outra ferramenta, avance para instalar o certificado no lighttpd.

Execute o seguinte comando do OpenSSL. Ele cria uma chave RSA de 2048 bits e um CSR num único passo, com o assunto e os Subject Alternative Names (SANs) fornecidos diretamente na linha de comando, para que o OpenSSL não pare para fazer perguntas:

openssl req -new -newkey rsa:2048 -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

O que cada parte faz:

  • -newkey rsa:2048 gera uma nova chave RSA de 2048 bits. 2048 bits é o mínimo atual para certificados públicos; pode usar rsa:4096 para uma chave maior, ou mudar para ECDSA (ver abaixo).
  • -nodes deixa a chave privada sem encriptação, para que o lighttpd a possa ler no arranque sem pedir uma frase-passe.
  • -keyout e -out nomeiam os ficheiros da chave privada e do CSR.
  • -subj fornece o assunto do certificado. Coloque aqui o nome real da sua empresa, estado e cidade, não os valores de exemplo. CN (Common Name) é o seu domínio principal.
  • -addext “subjectAltName=…” lista todos os nomes de host que o certificado deve cobrir. As CAs públicas validam com base na lista SAN, portanto inclua também o Common Name aqui.

Substitua yourdomain.com pelo seu domínio real em todos os locais. Para cobrir nomes de host adicionais, adicione-os à lista SAN separados por vírgulas, por exemplo DNS:api.yourdomain.com. Para um certificado wildcard, inclua tanto o wildcard como o domínio simples: DNS:*.yourdomain.com,DNS:yourdomain.com. Use apenas caracteres alfanuméricos nos campos do assunto, e utilize o código oficial de duas letras do país para o campo C.

Se preferir uma chave ECDSA (menor e mais rápida, com P-256 amplamente suportado), gere a chave e o CSR desta forma:

openssl req -new -newkey ec -pkeyopt ec_paramgen_curve:prime256v1 -pkeyopt ec_param_enc:named_curve -nodes 
-keyout yourdomain.key 
-out yourdomain.csr 
-subj "/C=US/ST=YourState/L=YourCity/O=YourCompany/CN=yourdomain.com" 
-addext "subjectAltName=DNS:yourdomain.com,DNS:www.yourdomain.com"

O lighttpd suporta certificados RSA e ECDSA através do mod_openssl, e pode disponibilizar ambos no mesmo socket listando dois pares de diretivas ssl.pemfile e ssl.privkey.

Se preferir responder às perguntas campo a campo, execute openssl req -new -newkey rsa:2048 -nodes -keyout yourdomain.key -out yourdomain.csr sem -subj e sem -addext. O OpenSSL irá perguntar por cada campo, um a um. Quando isso acontecer:

  • Country Name (C): o código ISO de duas letras do seu país, por exemplo US ou GB. Para certificados de Validação de Negócio ou Validação Estendida, este deve ser o país oficial de registo da sua organização.
  • State or Province Name (ST): o nome completo, por exemplo Tennessee. Não abrevie.
  • Locality Name (L): a cidade ou localidade, por exemplo Nashville.
  • Organization Name (O): o nome oficial registado da sua empresa, por exemplo Your Company LLC. Para certificados de Validação de Domínio, pode inserir NA.
  • Organizational Unit Name (OU): este campo está obsoleto e é ignorado pelas CAs públicas. Deixe-o em branco pressionando Enter.
  • Common Name (CN): o Fully Qualified Domain Name para o qual o certificado se destina, por exemplo www.yourdomain.com. Para um wildcard, use *.yourdomain.com.
  • Email Address: opcional e não utilizado pelas CAs públicas. Pode deixar em branco.
  • A challenge password e An optional company name: ambos são atributos obsoletos que as CAs públicas ignoram. Deixe-os em branco.

Sem a flag -addext, o CSR resultante não terá entradas SAN. As CAs públicas validam com base na lista SAN e irão rejeitar (ou substituir silenciosamente) um pedido sem uma delas, portanto o caminho recomendado é o comando com -subj e -addext mostrado acima.

Passo 3: Localize os seus ficheiros

Liste o diretório atual para confirmar que ambos os ficheiros foram criados:

ls

Deverá ver dois novos ficheiros:

  • yourdomain.key: a sua chave privada. Mantenha-a no servidor, faça uma cópia de segurança segura, e nunca a envie a ninguém, incluindo à Autoridade Certificadora. Quem detiver a chave pode fazer-se passar pelo seu site.
  • yourdomain.csr: o seu Certificate Signing Request. Este é o ficheiro que submete ao fornecedor de SSL.

Restrinja a chave privada para que apenas o proprietário do ficheiro a possa ler:

chmod 600 yourdomain.key

Passo 4: Verifique o CSR (opcional, mas recomendado)

Antes de o submeter, verifique se o CSR contém o assunto e os SANs corretos e se a sua assinatura é válida. Isto decodifica o pedido localmente com o OpenSSL:

openssl req -noout -text -verify -in yourdomain.csr

Confirme que a linha Subject mostra os seus dados, que X509v3 Subject Alternative Name lista todos os nomes de host esperados, e que a verificação da assinatura apresenta verify OK. O algoritmo de assinatura deve indicar sha256WithRSAEncryption (ou ecdsa-with-SHA256 para uma chave ECDSA). Se preferir não usar a linha de comando, cole o CSR no nosso Descodificador de CSR online para ler os mesmos campos num navegador.

Passo 5: Submeta o seu CSR

Para copiar o CSR para o seu pedido, imprima o seu conteúdo:

cat yourdomain.csr

Verá um bloco de texto semelhante a este:

-----BEGIN CERTIFICATE REQUEST-----
MIICyzCCAbMCAQAwTDELMAkGA1UEBhMCVVMxCzAJBgNVBAgMAkNBMQsw...
...(many more lines of base64 characters)...
-----END CERTIFICATE REQUEST-----

Copie o bloco na íntegra, incluindo as linhas —–BEGIN CERTIFICATE REQUEST—– e —–END CERTIFICATE REQUEST—– (cada marcador tem cinco hífens em cada lado). Esse bloco completo é o seu CSR. Cole-o no formulário de pedido durante a sua compra, e mantenha a chave privada correspondente no lugar, no servidor.

Se preferir não usar a linha de comando, também pode criar o pedido com o nosso Gerador de CSR online. Note que este gera a chave privada no seu navegador, portanto guarde essa chave você mesmo e transfira-a para o servidor.

Depois de a sua CA validar o pedido, receberá o seu certificado. Dependendo do nível de validação, isto demora alguns minutos para a Validação de Domínio, ou até vários dias úteis para a Validação de Negócio e a Validação Estendida.

Passo 6: Instale o certificado no lighttpd

Quando o certificado chegar, coloque o certificado emitido e a sua cadeia intermédia no servidor, junto à chave privada, e depois aponte o lighttpd para eles no bloco de socket TLS. No lighttpd atual, o suporte a TLS está no mod_openssl, e o formato recomendado (desde que o lighttpd 1.4.53 introduziu ssl.privkey) mantém o certificado mais a cadeia num ficheiro e a chave privada num ficheiro separado:

server.modules += ( "mod_openssl" )

$SERVER["socket"] == ":443" {
    ssl.engine  = "enable"
    ssl.pemfile = "/etc/lighttpd/ssl/yourdomain.fullchain.pem"
    ssl.privkey = "/etc/lighttpd/ssl/yourdomain.key"
}

O ficheiro ssl.pemfile deve conter o seu certificado seguido dos certificados intermédios (crie-o com cat yourdomain.crt yourdomain.ca-bundle > yourdomain.fullchain.pem). O formato antigo de ficheiro único, que concatenava o certificado e a chave privada num único ssl.pemfile, ainda funciona em versões mais antigas, mas o formato de ficheiros separados corresponde à forma como as Autoridades Certificadoras entregam os ficheiros e é a recomendação documentada. Teste a configuração com sudo lighttpd -t -f /etc/lighttpd/lighttpd.conf e reinicie o lighttpd para aplicar a alteração. Para o fluxo de trabalho completo, consulte o nosso guia sobre como instalar um certificado SSL no lighttpd.

Economize 10% em certificados SSL ao fazer seu pedido hoje!

Emissão rápida, criptografia forte, 99,99% de confiança no navegador, suporte dedicado e garantia de reembolso de 25 dias. Código do cupom: SAVE10

Uma imagem detalhada de um dragão em voo
Escrito por

Redator de conteúdo experiente, especializado em certificados SSL. Transformação de tópicos complexos de segurança cibernética em conteúdo claro e envolvente. Contribua para melhorar a segurança digital por meio de narrativas impactantes.