help:mentorweb:instalacao_do_certificado_digital_let_s_encrypt_em_servidores_linux_com_haproxy

Voltar para a página Como utilizar Https

Instalação do Let's Encrypt em servidores Linux com HAProxy

  • Este artigo aborta a instalação do gerador de certificados digitais SSL válidos Let's Encrypt em servidores Ubuntu Server 16.4 LTS com HAProxy
  • A primeira coisa que você precisa saber é que para gerar um certificado digital SSL valido é necessário ter um domínio valido registrado em uma empresa/entidade mantenedora de registros de domínios.
  • No caso dos domínios terminados em .br, o registro pode ser feito diretamente no Registro.br.
  • No caso de domínios terminados em .com, o registro pode ser feito na empresa GoDaddy.
  • Depois do domínio registrado, o domínio precisa ser publicado.
  • A publicação de um domínio consiste em fazer o apontamento do domínio para um servidor com IP fixo e acesso a internet.
    *
  • Após o domínio ser publicado, ele será propagado entre todos os servidores de DNS da internet. A propagação pode levar até 24 horas para os servidores hospedados no Brasil e até 72 horas para servidores internacionais.
  • Após a propagação de DNS estar concluída, é que pode-se iniciar o processo de registro de um certificado digital no Let's Encrypt, através da instalação do seu software no servidor Linux.
  • A Let’s Encrypt é uma Autoridade Certificadora gratuita e automatizada. Ela eliminou diversos processos envolvidos nos tipos de certificados SSL como a criação, validação, assinatura, instalação e renovação.
  • O projeto é mantido através de campanhas de crowdfunding que ajudam custear toda a operação. Além disso há renomadas empresas por trás da iniciativa como Mozilla, Cisco, Facebook, Google Chrome, Shopify e várias outras.
  • O tipo de certificado disponibilizado pela Let’s Encrypt é o Domain Validated Certificate (Certificado de Domínio Validado).
  • A primeira coisa a ser feita é a atualização das listas de repositórios do servidor Linux. Para isso execute o comando abaixo:
$ sudo apt-get update
  • Depois da lista de repositórios atualizada, deve ser instalado os pacotes git e bc através dos comandos abaixo:
$ sudo apt-get -y install git bc
  • Com os pacotes git e bc instalados, podemos fazer o download do letsencrypt clonando o seu repositório do GitHub executado o próximo comando:

abaixo:

$ sudo git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
  • Ao fim do processo de clonagem, você deve ter uma cópia funcional do letsencrypt no diretório /opt/letsencrypt
  • O Let's Encrypt fornece varias maneiras de obter certificados SSL, através de vários plugins. A maioria dos plugins só irá ajudá-lo com a obtenção de um certificado que você deve configurar manualmente no seu servidor.
  • Os plugins que apenas obtêm certificados e não os instalam são chamados de “autenticadores” porque são usados ​​para autenticar se um servidor deve receber um certificado ou não.
  • Nos usaremos o plug-in Standalone para obter um certificado SSL.
  • Primeiramente você deve se certificar que as portas 80 e 54531 não estão em uso e estão abertas para acesso a internet.
  • Para verificar se as portas estão em uso no servidor Linux execute o comando abaixo, apenas trocando o número da porta. Se houver uma linha de registro, significa que a porta esta em uso e você deve liberar a porta parando o serviço.
$ sudo netstat -na | grep ':80.*LISTEN'

  • Para verificar se a porta 80 esta aberta para acesso externo ao servidor, execute os comandos abaixo:
$ telnet
$ open
$ ipdoservidor 80

  • O servidor deverá retornar a mensagem Connected to ipdoservidor.
  • Para verificar a porta 54531, basta executar os mesmos comandos, apenas trocando o número 80 pelo número 54531.
  • Antes de executar o Let's Encrypt, entre no diretório onde ele esta instalado:
$ cd /opt/letsencrypt
  • Agora use o plugin Standalone executando este comando:
$ ./letsencrypt-auto certonly --standalone
  • Depois que o letsencrypt for iniciado, você será solicitado a fornecer algumas informações.
  • As informações exatas podem variar dependendo de você já ter utilizado o Let's Encrypt antes ou não, mas aqui será apresentado como na primeira utilização.
  • No prompt, digite um endereço de e-mail que será usado para avisos e recuperação de chaves perdidas:

  • Então você deve concordar com o contrato Let's Encrypt Subscribe. Selecione Concordo:

  • Em seguida, digite o(s) seu(s) nome(s) de domínio. Você pode digitar vários domínios que serão incorporados no mesmo certificado SSL. Por exemplo, example.com e www.example.com.
  • Os domínios devem estar separados por vírgula (,) ou espaço.

  • Se tudo foi bem-sucedido, será exibida uma mensagem semelhante a mensagem abaixo:
  * IMPORTANT NOTES:
 - If you lose your account credentials, you can recover through
   e-mails sent to sammy@digitalocean.com
 - Congratulations! Your certificate and chain have been saved at
   / etc/letsencrypt/live/example.com/fullchain.pem. Your
   cert will expire on 2016-03-15. To obtain a new version of the
   certificate in the future, simply run Let's Encrypt again.
 - Your account credentials have been saved in your Let's Encrypt
   configuration directory at / etc/letsencrypt. You should make a
   secure backup of this folder now. This configuration directory will
   also contain certificates and private keys obtained by Let's
   Encrypt so making regular backups of this folder is ideal.
 - If like Let's Encrypt, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le
 

Observar o caminho e a data de expiração do seu certificado, que foi destacado na saída do exemplo.

Depois de obter o certificado SSL, você terá os seguintes arquivos PEM-codificados:

  • Cert.pem: Certificado do seu domínio
  • Chain.pem: Cadeia de dados do certificado Letsencrypt
  • Fullchain.pem: Combinação do cert.pem e do chain.pem
  • Privkey.pem: Chave privada do seu certificado
  • É importante que você esteja ciente da localização dos arquivos de certificado que foram criados, para que você possa usá-los na configuração do servidor da Web.
  • Os próprios arquivos são colocados em um subdiretório em /etc/letsencrypt/archive . No entanto, o Let's Encrypt cria links simbólicos para os arquivos de certificado mais recentes no diretório /etc/letsencrypt/live/seudominio.com.br
  • Você pode verificar se os arquivos existem executando este comando (substituindo o “seudominio.com.br” pelo seu domínio):
$ sudo ls /etc/letsencrypt/live/your_domain_name
  • A saída deve ser os quatro arquivos de certificado mencionados anteriormente.
  • Ao configurar um certificado SSL para uso no HAProxy, você deve combinar fullchain.pem e privkey.pem em um único arquivo.
  • Primeiro, crie o diretório onde o arquivo combinado será colocado, /etc/haproxy/certs:
$ sudo mkdir -p /etc/haproxy/certs
  • Em seguida, crie o arquivo combinado com o comando cat (substitua o example.com example.com pelo seu nome de domínio):
$ DOMAIN='example.com' sudo -E bash -c 'cat /etc/letsencrypt/live/$DOMAIN/fullchain.pem /etc/letsencrypt/live/$DOMAIN/privkey.pem > /etc/haproxy/certs/$DOMAIN.pem'
  • Depois é preciso dar permissão de execução para o arquivo combinado que foi criado:
$ sudo chmod 775 /etc/haproxy/certs/seudominio.com
  • Abrir o haproxy.cfg executando o próximo comando:
$ sudo nano /etc/haproxy/haproxy.cfg
  • Após o arquivo aberto, adicionar a linha abaixo, na seção global.
tune.ssl.default-dh-param 2048

Exemplo:

global
		log /dev/log    local0
		log /dev/log    local1 notice
		chroot /var/lib/haproxy
		stats socket /run/haproxy/admin.sock mode 660 level admin
		stats timeout 30s
		user haproxy
		group haproxy
		maxconn 4096
		tune.ssl.default-dh-param 2048 #<=Adicionar a linha aqui
		daemon
 
        # Default SSL material locations
        ca-base /etc/ssl/certs
        crt-base /etc/ssl/private
 
        # Default ciphers to use on SSL-enabled listening sockets.
        # For more information, see ciphers(1SSL).
        ssl-default-bind-ciphers kEECDH+aRSA+AES:kRSA+AES:+AES256:RC4-SHA:!kEDH:!LOW:!EXP:!MD5:!aNULL:!eNULL
  • Em seguida adicionar as linhas abaixo na seção frontend:
bind *:443 ssl crt /etc/haproxy/certs/seudominio.com.br.pem
redirect scheme https if !{ ssl_fc }

Exemplo:

frontend www
	bind *:80 #Endereco de entrada
	bind *:443 ssl crt /etc/haproxy/certs/seudominio.com.br.pem #<= Adicionar a linha aqui
        redirect scheme https if !{ ssl_fc } #<= Adicionar a linha aqui
	mode http
	option http-server-close
	capture request header host len 64
  • (edição externa)