Como Instalar o Certificado SSL Let’s Encrypt para Segurar o Apache no RHEL/CentOS 7/6

Estendendo o último tutorial do Let’s Encrypt sobre certificados SSL/TLS gratuitos, neste artigo vamos demonstrar como obter e instalar certificados SSL/TLS gratuitos emitidos pela Autoridade de Certificação Let’s Encrypt para o servidor web Apache no CentOS/RHEL 7/6 e também nas distribuições Fedora.

Se você deseja instalar o Let’s Encrypt para o Apache no Debian e no Ubuntu, siga este guia abaixo:

Configurar o Let’s Encrypt para Proteger o Apache no Debian e Ubuntu

Ambiente de Teste de Exemplo
Install Lets Encrypt for Apache on CentOS and RHEL

Requisitos

  1. A registered domain name with valid A records to point back to your server public IP Address.
  2. Servidor Apache instalado com o módulo SSL habilitado e Hospedagem Virtual habilitada caso esteja hospedando vários domínios ou subdomínios.

Passo 1: Instalar o Servidor Web Apache

1. Se ainda não estiver instalado, o daemon httpd pode ser instalado emitindo o comando abaixo:

# yum install httpd

2. Para que o software Let’s Encrypt funcione com o Apache, assegure-se de que o módulo SSL/TLS esteja instalado emitindo o comando abaixo:

# yum -y install mod_ssl

3. Finalmente, inicie o servidor Apache com o seguinte comando:

# systemctl start httpd.service          [On RHEL/CentOS 7]
# service httpd start                    [On RHEL/CentOS 6]

Passo 2: Instalar o Certificado SSL do Let’s Encrypt

4. O método mais simples de instalar o cliente Let’s Encrypt é clonando o repositório do github no seu sistema de arquivos. Para instalar o git no seu sistema, você deve habilitar os repositórios Epel com o seguinte comando.

# yum install epel-release

5. Uma vez que os repositórios Epel forem adicionados no seu sistema, vá em frente e instale o cliente git executando o comando abaixo:

# yum install git

6. Agora, uma vez que você tenha instalado todas as dependências necessárias para lidar com o Let’s Encrypt, vá para o diretório /usr/local/ e comece a baixar o cliente Let’s Encrypt do seu repositório oficial no github com o seguinte comando:

# cd /usr/local/
# git clone https://github.com/letsencrypt/letsencrypt

Passo 3: Obter um Certificado SSL Gratuito do Let’s Encrypt para o Apache

7. O processo de obtenção de um Certificado Let’s Encrypt gratuito para o Apache é automatizado para CentOS/RHEL graças ao plugin apache.

Vamos executar o comando do Let’s Encrypt para obter um Certificado SSL. Vá para o diretório de instalação do Let’s Encrypt em /usr/local/letsencrypt e execute o comando letsencrypt-auto fornecendo a opção --apache e a flag -d para cada subdomínio que você precisa de um certificado.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto --apache -d your_domain.tld 
Create Lets Encrypt SSL Certificate for Apache

8. Forneça o endereço de e-mail que será usado pelo Let’s Encrypt para recuperar sua chave perdida ou para avisos urgentes e pressione Enter para continuar.

Add Email Address for Lets Encrypt

9. Concordar com os termos da licença pressionando a tecla Enter.

Agree Lets Encrypt License

10. No CentOS/RHEL, por padrão, o servidor Apache não utiliza o conceito de separar diretórios para hosts habilitados dos hosts disponíveis (inativos) como as distribuições baseadas no Debian fazem.

Além disso, o hospedagem virtual está desativada por padrão. A declaração do Apache que especifica o nome do servidor (ServerName) não está presente no arquivo de configuração SSL.

Para ativar essa diretiva, o Let’s Encrypt solicitará que você selecione um host virtual. Como não encontra nenhum Vhost disponível, selecione o arquivo ssl.conf para ser modificado automaticamente pelo cliente Let’s Encrypt e pressione Enter para continuar.

Active VirtualHost Directive and Select Mod_SSL

11. Em seguida, escolha o método Fácil para solicitações HTTP e pressione Enter para avançar.

Allow Easy HTTP Requests

12. Por fim, se tudo correu bem, uma mensagem de parabéns deve ser exibida na tela. Pressione Enter para liberar o prompt.

Lets Encrypt Enabled on Domain

É isso! Você emitiu com sucesso um certificado SSL/TLS para seu domínio. Agora você pode começar a navegar em seu site usando o protocolo HTTPS.

Passo 4: Testar a Criptografia Gratuita do Let’s Encrypt no Domínio

13. Para testar a integridade do handshake SSL/TLS do seu domínio, visite o link abaixo e teste seu certificado em seu domínio.

https://www.ssllabs.com/ssltest/analyze.html
Verify Lets Encrypt Certificate on Domain

14. Se você receber uma série de relatórios sobre a vulnerabilidade do seu domínio nos testes realizados, então você precisa corrigir essas falhas de segurança urgentemente.

Uma classificação geral de classe C torna seu domínio muito inseguro. Para corrigir esses problemas de segurança, abra o arquivo de configuração do Apache SSL e faça as seguintes alterações:

# vi /etc/httpd/conf.d/ssl.conf

Procure a linha com a declaração SSLProtocol e adicione -SSLv3 ao final da linha.

Fix Apache SSL Configuration

Vá mais fundo no arquivo, procure e comente a linha com SSLCipherSuite colocando um # na frente dela e adicione o seguinte conteúdo abaixo desta linha:

SSLCipherSuite          ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder     on
SSLOptions +StrictRequire
Configure SSL Configuration

15. Depois de ter feito todas as alterações acima, salve e feche o arquivo, em seguida, reinicie o daemon do Apache para aplicar as alterações.

# systemctl restart httpd.service          [On RHEL/CentOS 7]
# service httpd restart                    [On RHEL/CentOS 6]

16. Agora, teste o status da criptografia do seu domínio novamente, visitando o mesmo link acima. Para realizar novos testes, clique no link Limpar cache do site.

https://www.ssllabs.com/ssltest/analyze.html 
Test Lets Encrypt SSL Certificate on Website

Agora você deve obter uma classificação geral de classe A, o que significa que seu domínio está altamente seguro.

Passo 4: Renovação Automática dos Certificados Let’s Encrypt no Apache

17. Esta versão beta do software Let’s Encrypt emite certificados com data de validade após 90 dias. Portanto, para renovar o certificado SSL, você deve executar o comando letsencrypt-auto novamente antes da data de validade, com as mesmas opções e flags usados para obter o certificado inicial.

Um exemplo de como renovar manualmente o certificado é apresentado abaixo.

# cd /usr/local/letsencrypt
# ./letsencrypt-auto certonly --apache --renew-by-default  -d your_domain.tld

18. Para automatizar esse processo, crie o seguinte script bash fornecido por github erikaheidi, no diretório /usr/local/bin/ com o seguinte conteúdo. (o script foi ligeiramente modificado para refletir nosso diretório de instalação do letsencrypt).

# vi /usr/local/bin/le-renew-centos

Adicione o seguinte conteúdo ao arquivo le-renew-centos:

!/bin/bash

domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;

get_domain_list(){
        certdomain=$1
        config_file="$le_conf/renewal/$certdomain.conf"

        if [ ! -f $config_file ] ; then
                echo "[ERROR] The config file for the certificate $certdomain was not found."
                exit 1;
        fi

        domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
        last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')

        if [ "${last_char}" = "," ]; then
                domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
        fi

        echo $domains;
}

if [ -z "$domain" ] ; then
        echo "[ERROR] you must provide the domain name for the certificate renewal."
        exit 1;
fi

cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"

if [ ! -f $cert_file ]; then
        echo "[ERROR] certificate file not found for domain $domain."
        exit 1;
fi

exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)

echo "Checking expiration date for $domain..."

if [ "$days_exp" -gt "$exp_limit" ] ; then
        echo "The certificate is up to date, no need for renewal ($days_exp days left)."
        exit 0;
else
        echo "The certificate for $domain is about to expire soon. Starting renewal request..."
        domain_list=$( get_domain_list $domain )
        "$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
        echo "Restarting Apache..."
        /usr/bin/systemctl restart httpd
        echo "Renewal process finished for domain $domain"
        exit 0;
fi

19. Conceda permissões de execução para o script, instale o pacote bc e execute o script para testá-lo. Use o nome de domínio como um parâmetro posicional para o script. Emita os comandos abaixo para realizar esta etapa:

# yum install bc
# chmod +x /usr/local/bin/le-renew-centos
# /usr/local/bin/le-renew-centos your_domain.tld

20. Por fim, utilizando o agendamento do Linux, adicione um novo cron job para executar o script a cada dois meses, garantindo que seu certificado seja atualizado antes da data de expiração.

# crontab -e

Adicione a seguinte linha no final do arquivo.

0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1

É isso! Seu servidor Apache em cima do sistema CentOS/RHEL está agora servindo conteúdo SSL usando um certificado SSL gratuito do Let’s Encrypt.

Source:
https://www.tecmint.com/install-lets-encrypt-ssl-certificate-to-secure-apache-on-rhel-centos/