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 Ubuntu, siga o guia abaixo:
Configurar o Let’s Encrypt para Segurar o Apache no Debian e Ubuntu
Ambiente de Teste

Requisitos
- A registered domain name with valid
A
records to point back to your server public IP Address. - Servidor Apache instalado com o módulo SSL habilitado e Hospedagem Virtual habilitada no caso de hospedar 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. Por fim, 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 é clonar 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 ao seu sistema, vá em frente e instale o cliente git executando o comando abaixo:
# yum install git
6. Agora, uma vez que você instalou 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 para o qual 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. Concordar com os termos da licença pressionando a tecla Enter.

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 em 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.

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

12. Por fim, se tudo correu bem, uma mensagem de parabéns deve 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 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

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
no final da linha.

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

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

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 de 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 este processo, crie o seguinte script bash fornecido por github erikaheidi, no diretório /usr/local/bin/
com o seguinte conteúdo. (o script está ligeiramente modificado para refletir o 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, assegurando 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 execução no topo do sistema CentOS/RHEL agora está 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/