Certificados SSL con Let´s Encrypt en Apache Web Server
Índice:
- Pré-requisitos
- Instale o Certbot
- Gerar grupo Dh forte (Diffie-Hellman)
- Obtendo um certificado SSL Let's Encrypt
- Renovação automática Vamos criptografar o certificado SSL
- Conclusão
Let's Encrypt é uma autoridade de certificação criada pelo Internet Security Research Group (ISRG). Ele fornece certificados SSL gratuitos por meio de um processo totalmente automatizado projetado para eliminar a criação, validação, instalação e renovação manual de certificados.
Os certificados emitidos pelo Let's Encrypt são confiáveis por todos os principais navegadores hoje.
Neste tutorial, forneceremos instruções passo a passo sobre como proteger seu Apache com o Let's Encrypt usando a ferramenta certbot no Ubuntu 18.04.
Pré-requisitos
Verifique se você atendeu aos seguintes pré-requisitos antes de continuar com este tutorial:
- Nome de domínio apontando para o IP do servidor público. Usaremos
example.com. Você tem o Apache instalado com um host virtual apache para o seu domínio.
Instale o Certbot
O Certbot é uma ferramenta completa e fácil de usar que pode automatizar as tarefas para obter e renovar os certificados Let's Encrypt SSL e configurar servidores da Web. O pacote certbot está incluído nos repositórios padrão do Ubuntu.
Atualize a lista de pacotes e instale o pacote certbot:
sudo apt update
sudo apt install certbot
Gerar grupo Dh forte (Diffie-Hellman)
A troca de chaves Diffie – Hellman (DH) é um método de troca segura de chaves criptográficas por um canal de comunicação não seguro. Vamos gerar um novo conjunto de parâmetros DH de 2048 bits para fortalecer a segurança:
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Se desejar, você pode alterar o tamanho até 4096 bits, mas nesse caso, a geração pode demorar mais de 30 minutos, dependendo da entropia do sistema.
Obtendo um certificado SSL Let's Encrypt
Para obter um certificado SSL para o domínio, usaremos o plug-in Webroot que funciona criando um arquivo temporário para validar o domínio solicitado no diretório
${webroot-path}/.well-known/acme-challenge
. O servidor Let's Encrypt faz solicitações HTTP para o arquivo temporário para validar que o domínio solicitado seja resolvido no servidor em que o certbot é executado.
Para simplificar,
/var/lib/letsencrypt
todas as solicitações HTTP para
.well-known/acme-challenge
em um único diretório,
/var/lib/letsencrypt
.
Os comandos a seguir criarão o diretório e o gravarão no servidor Apache.
sudo mkdir -p /var/lib/letsencrypt/.well-known
sudo chgrp www-data /var/lib/letsencrypt
sudo chmod g+s /var/lib/letsencrypt
Para evitar a duplicação de código, crie os dois trechos de configuração a seguir:
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS
Alias /.well-known/acme-challenge/ "/var/lib/letsencrypt/.well-known/acme-challenge/" AllowOverride None Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec Require method GET POST OPTIONS
SSLCipherSuite EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH SSLProtocol All -SSLv2 -SSLv3 -TLSv1 -TLSv1.1 SSLHonorCipherOrder On Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" Header always set X-Frame-Options DENY Header always set X-Content-Type-Options nosniff # Requires Apache >= 2.4 SSLCompression off SSLUseStapling on SSLStaplingCache "shmcb:logs/stapling-cache(150000)" # Requires Apache >= 2.4.11 SSLSessionTickets Off SSLOpenSSLConfCmd DHParameters "/etc/ssl/certs/dhparam.pem"
O snippet acima está usando os chippers recomendados pelo Cipherli.st, habilita o grampeamento OCSP, HSTS (HTTP Strict Transport Security) e impõe poucos cabeçalhos HTTP com foco em segurança.
Antes de ativar os arquivos de configuração, verifique se
mod_ssl
e
mod_headers
estão ativados, emitindo:
sudo a2enmod ssl
sudo a2enmod headers
Em seguida, ative os arquivos de configuração SSL executando os seguintes comandos:
sudo a2enconf letsencrypt
sudo a2enconf ssl-params
Habilite o módulo HTTP / 2, que tornará seus sites mais rápidos e mais robustos:
sudo a2enmod
Recarregue a configuração do Apache para que as alterações entrem em vigor:
sudo systemctl reload apache2
Agora, podemos executar a ferramenta Certbot com o plug-in webroot e obter os arquivos de certificado SSL digitando:
sudo certbot certonly --agree-tos --email [email protected] --webroot -w /var/lib/letsencrypt/ -d example.com -d www.example.com
Se o certificado SSL for obtido com sucesso, o certbot imprimirá a seguinte mensagem:
IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2018-10-28. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF:
Agora que você possui os arquivos de certificado, edite a configuração do host virtual do seu domínio da seguinte maneira:
ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration
ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration
ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration
ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com/ ServerName example.com ServerAlias www.example.com Protocols h2 http:/1.1 Redirect permanent / https://example.com/ DocumentRoot /var/www/example.com/public_html ErrorLog ${APACHE_LOG_DIR}/example.com-error.log CustomLog ${APACHE_LOG_DIR}/example.com-access.log combined SSLEngine On SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem # Other Apache Configuration
Com a configuração acima, estamos forçando o HTTPS e redirecionando da versão www para a versão não www. Fique à vontade para ajustar a configuração de acordo com suas necessidades.
Recarregue o serviço Apache para que as alterações entrem em vigor:
sudo systemctl reload apache2
Agora você pode abrir seu site usando
https://
e verá um ícone de cadeado verde.

Renovação automática Vamos criptografar o certificado SSL
Os certificados do Let's Encrypt são válidos por 90 dias. Para renovar automaticamente os certificados antes que eles expirem, o pacote certbot cria um cronjob que é executado duas vezes por dia e renova automaticamente qualquer certificado 30 dias antes de sua expiração.
Depois que o certificado é renovado, também precisamos recarregar o serviço Apache. Anexe
--renew-hook "systemctl reload apache2"
ao arquivo
/etc/cron.d/certbot
para que ele se pareça com o seguinte:
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(3600))' && certbot -q renew --renew-hook "systemctl reload apache2"
Para testar o processo de renovação, você pode usar o switch
--dry-run
:
sudo certbot renew --dry-run
Se não houver erros, significa que o processo de renovação foi bem-sucedido.
Conclusão
Neste tutorial, você usou o certbot do cliente Let's Encrypt, para fazer o download de certificados SSL para o seu domínio. Você também criou snippets do Apache para evitar duplicação de código e configurou o Apache para usar os certificados. No final do tutorial, você configurou um cronjob para renovação automática de certificado.
apache ubuntu vamos criptografar certbot sslEsta postagem é parte da série de instruções sobre como instalar a pilha de lâmpadas no ubuntu-18-04.
Outras postagens nesta série:
• Como instalar o Apache no Ubuntu 18.04 • Como configurar os hosts virtuais do Apache no Ubuntu 18.04 • Apache seguro com Let's Encrypt no Ubuntu 18.04 • Como instalar o MySQL no Ubuntu 18.04 • Como instalar o PHP no Ubuntu 18.04Apache seguro com vamos criptografar no centos 7
Neste tutorial, abordaremos as etapas necessárias para instalar um certificado SSL Let's Encrypt criptografado gratuitamente em um servidor CentOS 7 executando o Apache como um servidor web.
Apache seguro com vamos criptografar no centos 8
Este tutorial explica como instalar um certificado SSL Let's Encrypt criptografado no CentOS 8 executando o Apache como um servidor web. Usaremos a ferramenta certbot para obter e renovar os certificados.
Apache seguro com vamos criptografar no debian 9
Este tutorial irá guiá-lo através do processo de obtenção gratuita de Let's Encrypt usando a ferramenta certbot no Debian 9. Também mostraremos como configurar o Apache para usar o novo certificado SSL e ativar o HTTP / 2.







