Como Configurar a Criptografia SSL de Ponta a Ponta do CloudFlare

Configurar SSL para qualquer site é um desafio. Os visitantes do site, navegadores e mecanismos de busca recompensam um site devidamente seguro com Secure Sockets Layer (SSL). Anteriormente, esse processo envolvia a compra, instalação e configuração de um certificado SSL. Mas com o Cloudflare SSL, você pode concluir o processo de configuração do SSL com apenas alguns cliques!

Neste artigo, você aprenderá como configurar seu site com criptografia SSL via Cloudflare. Então, siga em frente para conexões SSL criptografadas de ponta a ponta!

Pré-requisitos

Para acompanhar este tutorial, são necessários alguns pré-requisitos listados abaixo:

  • A Cloudflare account with an existing website and domain pointed to the Cloudflare nameservers.
  • Um servidor Ubuntu Linux com NGINX instalado e configurado. Este tutorial demonstra o uso do Linux e do NGINX, mas o mesmo processo geral funciona para IIS ou Apache.

Configurando o Cloudflare Universal SSL: Apenas o Começo

Existem várias maneiras de configurar um SSL usando o Cloudflare. Muitas vezes, o método mais rápido é optar pelo SSL Universal. Porquê? Com o SSL Universal, em vez de procurar e comprar um certificado SSL, o Cloudflare provisiona um certificado e, em seguida, todo o tráfego enviado através do Cloudflare utilizará esse certificado.

Após habilitar o SSL Universal, o Cloudflare apresenta um certificado SSL válido tanto para visitantes quanto para motores de busca. Além disso, o Cloudflare não requer a configuração do servidor ou do site para utilizar esse certificado – muito prático!

1. Inicie o seu navegador da web e faça login no painel do Cloudflare.

2. Navegue até ao seu site a partir da lista de domínios da conta, conforme mostrado abaixo.

Choose the site to change options for.

3. Agora, clique em SSL/TLS para visualizar as opções de criptografia do seu site.

The SSL/TLS Encryption mode page

4. Escolha a opção Flexível para habilitar o SSL Universal. Uma vez selecionada, a alteração tem efeito imediato. Seu site agora está criptografado entre o navegador e o Cloudflare!

Enabling Universal SSL on Cloudflare

Configurando a Criptografia SSL Completa de Ponta a Ponta

Embora o SSL Universal seja uma ótima opção para começar a proteger sites, ele deixa o tráfego entre o servidor e o Cloudflare sem segurança. Felizmente, existem dois modos de criptografia para criptografar o tráfego do Cloudflare para o servidor, criptografia Completa e Completa (estrita), cada um com principalmente diferentes requisitos de instalação de certificação.

  • Completo – Requer um certificado no servidor, mas este pode ser um certificado autoassinado.
  • Full (estrito) – O certificado do lado do servidor instalado deve ser um certificado válido.

Vamos analisar a diferença entre essas criptografias e como configurá-las.

Configurando a criptografia SSL/TLS completa com um certificado autoassinado

Ao contrário do SSL Universal, a criptografia SSL/TLS completa requer que seu servidor da web forneça corretamente um certificado SSL para criptografar o tráfego do servidor para o Cloudflare. Existem várias maneiras de realizar isso, mas este tutorial demonstra os passos em um servidor Linux com o NGINX.

Gerando um Certificado Autoassinado

Para criptografar a conexão entre o Cloudflare e o seu servidor de origem, você precisa de um certificado SSL. Como o modo de criptografia SSL/TLS completo não exige que o certificado seja totalmente confiável, você pode usar um certificado autoassinado para começar rapidamente.

1. Conecte-se ao seu servidor web Linux usando o Secure Shell (SSH).

2. Mude (cd) para o diretório padrão SSL do Ubuntu (/etc/ssl) executando o comando abaixo. cd /etc/ssl

cd /etc/ssl
Navigating to the /etc/ssl directory

3. Agora, gere as chaves pública e privada para o seu site com o comando openssl. Para fazer isso, execute o comando openssl abaixo.

Este comando realiza algumas coisas:

  • Solicita (req) um certificado X.509 fornecido pelo parâmetro -x509.
  • Quando referenciado pelo NGINX, permite que o NGINX leia o certificado durante a inicialização usando o parâmetro -nodes.
  • Especifica o número de dias que o certificado é válido.
  • Cria uma nova chave pública e privada com -newkey via criptografia RSA de 2048 bits (rsa:2048).
  • Salva a chave privada em /etc/ssl/private/nginx-selfsigned.key com o parâmetro -keyout.
  • Salva a chave pública em /etc/ssl/certs/nginx-selfsigned.crt usando o parâmetro -out.
sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/private/nginx-selfsigned.key -out /etc/ssl/certs/nginx-selfsigned.crt

Se o openssl retornar um erro benigno de Can't load /root/.rnd into RNG, será necessário comentar a linha #RANDFILE = $ENV::HOME/.rnd no arquivo /etc/ssl/openssl.cnf. Todas as versões modernas do openssl utilizam o dispositivo do sistema /dev/urandom para dados de entropia aleatória e não requerem um arquivo específico para inicialização.

4. Após executar o comando com sucesso, o openssl solicitará algumas informações. Abaixo, você encontrará todos os valores fornecidos para este tutorial.

  • Nome do País: US
  • Nome do Estado ou Província: Illinois
  • Nome da Localidade: Bloomington
  • Nome da Organização: Test Company, LLC
  • Nome da Unidade Organizacional: <em branco>
  • Nome Comum: test.adamlistek.me
  • Endereço de Email: [email protected]
Generating a self-signed certificate

5. Por último, verifique se o certificado existe usando o comando test. Se o comando test retornar (echo $?) 0, então o arquivo existe conforme esperado. Você pode ver na captura de tela a seguir que cada comando retornou um valor de 0.

test -f /etc/ssl/private/nginx-selfsigned.key; echo $?
 test -f /etc/ssl/certs/nginx-selfsigned.crt; echo $?
Verifying that the certificate files exist

Configurando o NGINX

Agora que o certificado foi gerado e armazenado nos locais de chave /etc/ssl/certs e /etc/ssl/private, o NGINX deve ser configurado para aplicar o certificado e servir o conteúdo do site.

As configurações do site do NGINX são definidas em blocos server que geralmente são contidos em arquivos de host virtual. No exemplo abaixo, a configuração básica do site é armazenada no arquivo test.adamlistek.me.conf e incluída no arquivo principal nginx.conf.

1. Primeiro, crie um novo arquivo de host virtual com o nome de sua escolha, mas para este exemplo, nomeie-o como test.adamlistek.me.conf no diretório /etc/nginx/vhosts.d. Em seguida, copie o conteúdo abaixo para o arquivo de host virtual e salve-o.

Substitua o nome de domínio test.adamlistek.me pelo seu próprio, pois isso é apenas para fins de demonstração. E se o /etc/nginx/vhosts.d diretório não existir, crie o diretório executando mkdir /etc/nginx/vhosts.d.

server {
   # Escute na porta 80 para IPv4 e IPv6
   listen 80;
   listen [::]:80;
 server_name test.adamlistek.me;
 # Execute um redirecionamento 301 com quaisquer parâmetros para o bloco do servidor SSL abaixo
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Escute na porta 443 para IPv4 e IPv6 com HTTP2 habilitado (requer SSL)
   listen 443 ssl http2;
   listen [::]:443 ssl http2;
 server_name test.adamlistek.me;
 # A localização do certificado público e privado
   ssl_certificate /etc/ssl/certs/nginx-selfsigned.crt;
   ssl_certificate_key /etc/ssl/private/nginx-selfsigned.key;
 # A localização dos arquivos da web a serem carregados, esta é a localização padrão do NGINX
   root /usr/share/nginx/html;
 # O arquivo padrão a ser servido em uma solicitação de domínio raiz
   index index.html;
 }

2. Verifique se o seu arquivo de configuração principal do NGINX, /etc/nginx/nginx.conf, contém a linha include necessária dentro do bloco http, localizado no final do bloco.

# As configurações do servidor vão aqui
 …
 http {
     # Configurações adicionais vão aqui# Incluir hosts virtuais
     include /etc/nginx/vhosts.d/*.conf;
 }

3. Reinicie o NGINX com o seguinte comando se estiver usando systemd, que é um moderno gerenciador de sistema e serviço para o Linux.

service nginx restart

4. De volta ao Cloudflare, verifique se o certificado autoassinado está funcionando. Para fazer isso, desative a opção “orange-cloud” para o registro DNS em Proxy status, conforme mostrado abaixo. Desativar a opção “orange-cloud” contorna o Cloudflare e atende às solicitações diretamente do servidor web.

Disabling Cloudflare proxying via Proxy Status.

5. Certifique-se de que o site está retornando o certificado autoassinado recém-criado ao navegar para o site em seu navegador da web. Fazê-lo resultará em uma página de aviso, mostrada abaixo.

Displaying the self-signed certificate error.

6. Por fim, ative a criptografia completa TLS/SSL no Cloudflare. Para fazer isso, reative o status de Proxy Cloudflare “orange-cloud” no registro DNS que você desativou anteriormente. Em seguida, vá para a guia SSL/TLS e clique no botão de opção Completo mostrado abaixo.

Enabling Full SSL/TLS encryption on Cloudflare.

Gerando Certificados de Origem para Criptografia Completa (estrita) TLS/SSL

O modo de criptografia completa não garante que o certificado apresentado pelo servidor web tenha uma cadeia de certificados válida. Portanto, opte pela criptografia não estrita, e o Cloudflare aceitará qualquer certificado apresentado pelo servidor.

O Cloudflare oferece a capacidade de gerar um certificado TLS gratuito para proteger a conexão com o servidor de origem. No entanto, existem duas desvantagens ao usar um certificado de origem fornecido pelo Cloudflare. Uma é que você precisa gerar e instalar o certificado manualmente. A segunda é que o certificado parece um certificado autoassinado que nenhum navegador confiaria, exceto o Cloudflare.

É possível automatizar a geração de certificados usando o Endpoint de Criação de Certificado Origin CA, mas isso está além do escopo deste tutorial.

1. Navegue até o Servidor de Origem indo para a guia SSL/TLS —> Servidor Original, como mostrado abaixo, e clique no botão Criar Certificado.

Navigating to the Origin Server page.

2. Como você pode ver abaixo, as opções padrão já estão definidas para gerar um certificado wildcard para o domínio com 15 anos de validade — ótimo! Então, deixe as opções padrão e gere o certificado clicando no botão Criar no canto inferior direito da página.

A wildcard certificate, shown as *.domain.com, means that any subdomain will also be covered by this certificate including www.

Creating a Cloudflare-provided origin server certificate.

3. Adicione o certificado recém-criado ao seu sistema Linux salvando as chaves privadas e públicas primeiro com o editor de texto GNU nano. Como existem duas chaves para salvar, você precisará salvar os arquivos de chave um de cada vez.

Certifique-se de salvar a Chave Privada, pois ela só está disponível no momento em que você gerou um Certificado Original. Se você perder acidentalmente esta chave, revogue o certificado e emita um novo certificado.

Abra um terminal, então crie e abra o arquivo de chave pública (nginx-test.adamlistek.me.crt) no nano executando o primeiro comando abaixo.

Em seguida, volte para o Cloudflare e copie a chave do Certificado de Origem (chave pública) clicando na opção Clique para copiar, conforme mostrado abaixo. Em seguida, cole (Ctrl+U) a chave pública que você copiou para o arquivo de chave pública aberto no nano. Salve as alterações (Ctrl+O) e saia (Ctrl+X) do nano.

Depois de salvar o arquivo de chave pública, repita o mesmo processo de criação do arquivo de chave, copiando a chave do Cloudfare e salvando-a no arquivo de chave. Mas desta vez você está criando o arquivo de chave privada (nginx-test.adamlistek.me.key).

# A chave pública, na seção do Certificado de Origem
 nano /etc/ssl/certs/nginx-test.adamlistek.me.crt
# A chave privada, na seção de mesmo nome
 nano /etc/ssl/private/nginx-test.adamlistek.me.key
Copying the public/private certificate key information.

4. Agora que você criou as chaves pública e privada, aponte o NGINX para a localização dos certificados. Faça isso modificando o arquivo de configuração test.adamlistek.me.conf com as linhas abaixo, modificadas para suportar seu domínio.

 ssl_certificate /etc/ssl/certs/nginx-test.adamlistek.me.crt;
 ssl_certificate_key /etc/ssl/private/nginx-test.adamlistek.me.key;

5. Para aplicar os novos certificados, reinicie o NGINX com o seguinte comando.

service nginx restart

6. Agora volte para a aba SSL/TLS no Cloudflare, atualize o modo de criptografia SSL/TLS clicando em Completo (estrito), como mostrado abaixo.

Setting the Encryption mode to Full (strict).

Habilitando a Criptografia SSL/TLS Completa (estrita) com LetsEncrypt

A maior desvantagem ao usar um certificado de origem do Cloudflare é que ele é apenas confiável pelo Cloudflare. Suponha que você precise de um certificado totalmente confiável pelo navegador, seja como um recurso de fallback ou para maior controle. Nesse caso, o LetsEncrypt oferece a capacidade de gerar um certificado adequado.

Embora você possa usar qualquer certificado válido, LetsEncrypt é uma escolha comum para gerar um certificado válido. Existem vários clientes LetsEncrypt disponíveis, mas este tutorial demonstra o cliente acme.sh.

Como você já está no Cloudflare, um dos melhores métodos para provisionamento DNS com LetsEncrypt é através da opção DNS.

1. Primeiro, abra seu terminal e instale o acme.sh via comando curl.

curl https://get.acme.sh | sh
Installing the acme.sh client.

2. Em seguida, crie ou modifique o arquivo account.conf localizado no diretório de instalação para adicionar as chaves da API do Cloudflare salvas. Essas chaves podem ser encontradas na seção Perfil -> Tokens de API no painel do Cloudflare.

Embora seja possível criar um token específico com permissões limitadas, para os propósitos deste tutorial, utilize a Chave Global da API, conforme mostrado abaixo.

SAVED_CF_Key='cloudflareglobalapikey'
 SAVED_CF_Email='[email protected]'

3. Gere o certificado por meio do seguinte comando. Observe que o comando abaixo instrui o cliente acme.sh a usar o Cloudflare (dns_cf) para verificar (--dns) a propriedade do certificado. Em seguida, define o tempo de espera (--dnsslep) para 20 segundos antes de emitir (--issue) o certificado para (-d) o domínio (test.adamlistek.me).

Ao concluir o comando, abaixo, você verá os caminhos onde pode localizar seu certificado, chave do certificado, certificado intermediário CA e certificados de cadeia completa.

acme.sh --issue --dns dns_cf --dnssleep 20 -d test.adamlistek.me
Generating the LetsEncrypt certificate.

4. Como antes, modifique a configuração do site NGINX para alterar a localização do ssl_certificate e ssl_certificate_key. Certifique-se de substituir /home/user pelo local onde está instalado seu acme.sh.

ssl_certificate /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.csr;
 ssl_certificate_key /home/user/.acme.sh/test.adamlistek.me/test.adamlistek.me.key;

5. Aplique a nova configuração reiniciando o NGINX com o seguinte comando.

service nginx restart

6. Por fim, atualize o modo de criptografia SSL/TLS do Cloudflare indo para a guia SSL/TLS, depois clique em Completo (estrito).

Setting the Encryption mode to Full (strict).

Conclusão

Ao longo deste tutorial, você aprendeu como proteger seu site com as várias opções de SSL/TLS fornecidas pela Cloudflare. Adicionar o LetsEncrypt à sua configuração SSL do Cloudflare também oferece uma opção de certificado de origem flexível e gerenciado pelo usuário!

Com o conhecimento das várias opções para garantir a conexão com o visitante do site, você trabalhará para obter uma conexão totalmente segura com seu servidor usando o SSL da Cloudflare?

Source:
https://adamtheautomator.com/cloudflare-ssl/