Como Configurar a Criptografia SSL de Ponta a Ponta do CloudFlare

1. Configurar o SSL para qualquer site é um desafio. Os visitantes do site, os navegadores e os motores de busca recompensam um site devidamente Seguro com a Camada de Sockets (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, trabalhe para obter conexões SSL criptografadas de ponta a ponta!

Pré-requisitos

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

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

Configurar 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. Por quê? 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 pelo Cloudflare usará esse certificado.

Após habilitar o SSL Universal, o Cloudflare apresenta um certificado SSL válido tanto para visitantes quanto para mecanismos de busca. Além disso, o Cloudflare não exige a configuração do servidor ou do site para usar esse certificado – bacana!

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

2. Navegue até o seu site na lista de domínios da conta, conforme mostrado abaixo.

Choose the site to change options for.

3. Agora, clique em SSL/TLS para ver 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 entra em vigor imediatamente. Seu site agora está criptografado entre o navegador e o Cloudflare!

Enabling Universal SSL on Cloudflare

Configurando a Criptografia SSL de Ponta a Ponta Completa

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 criptografia completa (estrita), cada uma com requisitos de instalação de certificação principalmente diferentes.

  • Completo – Requer um certificado no servidor, mas este pode ser um certificado autoassinado.
  • Full (strict) – O certificado do servidor instalado no lado do servidor 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 exige que seu servidor da web forneça corretamente um certificado SSL para criptografar o tráfego do servidor para o Cloudflare. Existem muitas maneiras de fazer 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 seu servidor de origem, você precisa de um certificado SSL. Como o modo de criptografia SSL/TLS completa não exige que o certificado seja totalmente confiável, você pode usar um certificado autoassinado para começar rapidamente.

1. Acesse o seu servidor web Linux usando o Secure Shell (SSH).

2. Altere (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.

Esse 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 na inicialização usando o parâmetro -nodes.
  • Especifica o número de dias em 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 recorrem ao uso do dispositivo de entropia aleatória do sistema /dev/urandom para dados de entropia aleatória e não exigem um arquivo específico para semeamento.

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: <vazio>
  • Nome Comum: test.adamlistek.me
  • Endereço de E-mail: [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 como 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-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 NGINX são definidas em blocos server que normalmente estã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 dentro do 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 este é apenas para fins de demonstração. E se o /etc/nginx/vhosts.d local 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;
 # Realize um redirecionamento 301 com quaisquer parâmetros para o bloco de servidor SSL abaixo
   return 301 https://test.adamlistek.me$request_uri;
 }
 server {
   # Escute na porta 443 para IPv4 e IPv6 com HTTP2 ativado (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 seu arquivo de configuração principal do NGINX, /etc/nginx/nginx.conf, contém a linha de 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# Inclua hosts virtuais
     include /etc/nginx/vhosts.d/*.conf;
 }

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

service nginx restart

4. Volte ao Cloudflare, verifique se o certificado autoassinado está funcionando. Para fazer isso, desative o “cloud-orange” para o registro DNS em Status do Proxy, conforme mostrado abaixo. Desativar a opção “cloud-orange” faz com que o Cloudflare seja ignorado e as solicitações sejam atendidas diretamente pelo servidor web.

Disabling Cloudflare proxying via Proxy Status.

5. Garanta que o site está retornando o certificado autoassinado recém-criado navegando 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, habilite a criptografia Full TLS/SSL no Cloudflare. Para fazer isso, reative o status de Proxy Cloudflare “nuvem laranja” no registro DNS que você desabilitou anteriormente. Em seguida, navegue até 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 Full (estricta) SSL/TLS

O modo de criptografia completa não garante que o certificado apresentado pelo servidor web tenha uma cadeia de certificação válida real. 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 do seu servidor de origem. Mas há duas desvantagens em 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 além do Cloudflare.

É possível automatizar a geração de certificados usando o endpoint Origin CA Create Certificate API, 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 você vê 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 configuradas 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 primeiro as chaves privadas e públicas 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 essa chave, revogue o certificado e emita um novo certificado.

Abra um terminal e 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 Certificado de Origem (chave pública) clicando na opção Clique para copiar, como mostrado abaixo. Em seguida, cole (Ctrl+U) a chave pública que você copiou no 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 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), conforme mostrado abaixo.

Setting the Encryption mode to Full (strict).

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

A maior desvantagem ao usar um certificado de origem do Cloudflare é que ele é confiável apenas pelo Cloudflare. Se você precisa de um certificado totalmente confiável pelo navegador, seja como alternativa ou para mais controle, o LetsEncrypt oferece a capacidade de gerar um certificado adequado.

Embora você possa usar qualquer certificado válido, o 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 o comando curl.

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

2. O próximo passo é criar ou modificar o arquivo account.conf localizado no diretório de instalação para adicionar as chaves de API do Cloudflare salvas. Essas chaves podem ser encontradas na seção Perfil —> Tokens de API do painel do Cloudflare.

Embora você possa criar um token específico com permissões limitadas, para os propósitos deste tutorial, use a Chave de API Global, conforme mostrado abaixo.

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

3. Gerar o certificado através do seguinte comando. Observe que o comando abaixo indica ao cliente acme.sh para 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 da CA intermediária e certificados da 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 do NGINX para alterar a localização do ssl_certificate e ssl_certificate_key. Certifique-se de substituir /home/user pela localização onde está sua instalação do 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 diversas opções de SSL/TLS fornecidas pelo Cloudflare. Adicionar o LetsEncrypt à configuração SSL do seu Cloudflare proporciona 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ê seguirá o caminho para uma conexão totalmente segura com seu servidor usando o SSL do Cloudflare?

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