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
Introdução
- 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.
Instalação do Let's Encrypt
O que é o Let’s Encrypt
- 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).
Instalação do Let’s Encrypt
- 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
Obtendo um Certificado Digital válido
- 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.
Verifique se a porta 80 e 54531 estão abertas e/ou em uso
- 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.
Executando o Let's Encrypt
- 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 [email protected] - 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.
Arquivos de certificado
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.
Fullchain.pem e Privkey.pem combinados
- 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
Configurar o Certificado Digital no HAProxy
- 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