Pesquisa de site

Como instalar o certificado Let's Encrypt SSL para proteger o Apache no RHEL/CentOS 7/6


Estendendo o último tutorial da Let's Encrypt sobre certificados gratuitos SSL/TLS, neste artigo vamos demonstrar como obter e instalar certificados SSL/TLS gratuitos emitidos pela Let's Encrypt Certificate Authority para Apache< servidor web nas distribuições CentOS/RHEL 7/6 e Fedora também.

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

Configuração Vamos criptografar para proteger o Apache no Debian e Ubuntu

Testando Ambiente de Amostra

Requisitos

  1. Um nome de domínio registrado com registros A válidos para apontar para o endereço IP público do seu servidor.
  2. Servidor Apache instalado com módulo SSL habilitado e hospedagem virtual habilitada caso você esteja hospedando vários domínios ou subdomínios.

Etapa 1: Instale 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, certifique-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]

Etapa 2: Instale o certificado SSL Let's Encrypt

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

yum install epel-release

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

yum install git

6. Agora, depois de instalar todas as dependências necessárias para lidar com o Let's Encrypt, vá para o diretório /usr/local/ e comece a extrair o formulário do cliente Let's Encrypt seu repositório oficial do github com o seguinte comando:

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

Etapa 3: Obtenha um certificado SSL Let's Encrypt gratuito para Apache

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

Vamos executar o comando de script 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 o -d para cada subdomínio que você precisa de um certificado.

cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld 

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.

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

10. No CentOS/RHEL, por padrão, o servidor Apache não usa o conceito de separar diretórios para hosts habilitados de hosts disponíveis (inativos), como Debian sim.

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

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

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

12. Finalmente, se tudo correr bem, uma mensagem de parabéns deverá ser exibida na tela. Pressione Enter para liberar o prompt.

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

Etapa 4: teste gratuito, vamos criptografar a criptografia no domínio

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

https://www.ssllabs.com/ssltest/analyze.html

14. Se você receber uma série de relatórios sobre a vulnerabilidade do seu domínio nos testes realizados, você precisará corrigir essas falhas de segurança com urgência.

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 Apache SSL e faça as seguintes alterações:

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

Procure a linha com a instrução SSLProtocol e adicione -SSLv3 no final da linha.

Vá mais fundo no arquivo, pesquise 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

15. Depois de fazer todas as alterações acima, salve e feche o arquivo e reinicie o daemon Apache para aplicar as alterações.

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

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

https://www.ssllabs.com/ssltest/analyze.html 

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

Etapa 4: renovação automática, vamos criptografar certificados no Apache

17. Esta versão beta do software Let’s Encrypt libera 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 expiração, com as mesmas opções e flags utilizadas 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 pelo 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 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 seu nome de domínio como 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, usando o agendamento do Linux, adicione um novo cron job para executar o script a cada dois meses, garantindo que seu certificado será atualizado antes da data de expiração.

crontab -e

Adicione a seguinte linha na parte inferior 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 executado no sistema CentOS/RHEL agora está servindo conteúdo SSL usando um certificado SSL Let’s Encrypt gratuito.