A maioria dos servidores web como nginx e apache escuta na porta 80 por padrão e precisa de um pouco de configuração antes de começar a usar os certificados para criptografar o tráfego. Apesar de ter configurado, o servidor da web ainda pode atender o tráfego HTTP sem problemas. Assim, os visitantes do seu site digitarão apenas http: // exemplo.com em vez de https: // exemplo.com e todo o tráfego permanecerá sem criptografia para eles. Para contornar esse problema, precisamos configurar os servidores HTTP de forma que eles mesmos redirecionem todo o HTTP para HTTPS.
A configuração que tenho está usando um FQDN com um IP público, então vou emitir um certificado SSL de LetsEncrypt em vez de emitir um autoassinado. Dependendo do tipo de servidor da web que você está usando, você pode fazer isso de várias maneiras. Mas o fluxo geral é assim:
- Obtenha um certificado assinado de uma CA. No nosso caso, será LetsEncrypt
- Configure o servidor da web para usar a chave de criptografia para criptografar o tráfego HTTP de saída na porta 443. Esta é a porta HTTPS padrão.
- Redirecione todas as solicitações de entrada na porta 80 (que é HTTP não criptografado) para a porta 443, permitindo assim sessões criptografadas para todas as conexões de entrada.
Vamos demonstrar várias maneiras de alcançar o que queremos. A primeira é a solução mais fácil que usa Certbot.
1. Maneira mais fácil - usando plug-ins Certbot para Nginx ou Apache
Vou usar o Nginx como exemplo para este servidor. Se você estiver executando um diferente, como Apache ou HAProxy, basta visitar a página oficial do Certbot e selecionar seu sistema operacional e servidor web de escolha. Para Nginx no Ubuntu 18.04, estes são os comandos de que você precisaria.
Primeiro, atualize seu índice de repositório.
$ sudo apt-get update$ sudo apt-get install software-properties-common
Você precisaria adicionar os repositórios de terceiros necessários, que o Ubuntu pode não ter habilitado por padrão.
$ sudo add-apt-repository universe$ sudo add-apt-repository ppa: certbot / certbot
$ sudo apt-get update
Em seguida, instale o pacote certbot com plug-ins Nginx, usando o comando abaixo.
$ sudo apt-get install certbot python-certbot-nginxA instrução será diferente para diferentes plataformas e instale plugins para o servidor web, se disponível. A razão pela qual os plug-ins tornam nossas vidas muito mais fáceis é porque eles podem editar automaticamente os arquivos de configuração no servidor web para redirecionar o tráfego também. A desvantagem pode ser que, se você estiver executando um servidor muito personalizado para um site pré-existente, o plug-in pode quebrar algumas coisas nele.
Para novos sites, ou configurações muito simples, como um proxy reverso, o plug-in funciona surpreendentemente bem. Para obter os certificados e redirecionar o tráfego, basta executar o comando abaixo e seguir as várias opções interativas conforme o pacote orienta você por elas.
$ sudo certbot --nginxResultado:
certbot --nginxSalvando log de depuração em / var / log / letsencrypt / letsencrypt.registro
Plug-ins selecionados: Autenticador nginx, Instalador nginx
Digite o endereço de e-mail (usado para renovação urgente e avisos de segurança) (digite 'c' t
cancelar): YOUREMAILHERE @ EXEMPLO.COM
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Leia os Termos de Serviço em
https: // letsencrypt.org / documents / LE-SA-v1.2-novembro-15-2017.pdf. Você deve
concordar para se registrar no servidor ACME em
https: // acme-v02.api.deixa criptografar.org / diretório
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
(A) gree / (C) ancel: A
…
Nenhum nome foi encontrado em seus arquivos de configuração. Por favor entre em seu domínio
nome (s) (separados por vírgula e / ou espaço) (digite 'c' para cancelar): SUBDOMAIN.NOME DO DOMÍNIO.TLD
…
Escolha se deseja ou não redirecionar o tráfego HTTP para HTTPS, removendo o acesso HTTP.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
1: Sem redirecionamento - não faça mais alterações na configuração do servidor da web.
2: Redirecionar - Faça todas as solicitações redirecionarem para o acesso HTTPS seguro. Escolha isto para
novos sites ou se você tiver certeza de que seu site funciona em HTTPS. Você pode desfazer isso
mude editando a configuração do seu servidor web.
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Selecione o número apropriado [1-2] e [enter] (pressione 'c' para cancelar): 2
Redirecionando todo o tráfego na porta 80 para ssl em / etc / nginx / sites-enabled / default
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Parabéns! Você ativou https: // SUBDOMAIN com sucesso.NOME DO DOMÍNIO.TLD
Você deve testar sua configuração em:
https: // www.ssllabs.com / ssltest / analise.html?d = SUBDOMÍNIO.NOME DO DOMÍNIO.TLD
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ANOTAÇÕES IMPORTANTES:
- Parabéns! Seu certificado e cadeia foram salvos em:
Seu arquivo de chave foi salvo em:
/ etc / letsencrypt / live / SUBDOMAIN.NOME DO DOMÍNIO.TLD / privkey.pemConforme mostrado no exemplo acima, você só precisa fornecer um endereço de e-mail válido e seu nome de domínio para obter o certificado. Este certificado está registrado em / etc / letsencrypt / live / SUBDOMAIN.NOME DO DOMÍNIO.TLD
. O último diretório terá o nome de seu FQDN.
O aspecto mais importante é selecionar a opção Redirecionar e ela fará o trabalho de redirecionar todo o tráfego HTTP para HTTPS. Se você está curioso para saber quais são essas mudanças, você pode inspecionar os arquivos de configuração em / etc / nginx /
para obter a essência disso.
2. Editando os arquivos de configuração
Se você deseja configurar manualmente o seu servidor para usar os certificados. Para obter os certificados usando o certbot, execute:
$ sudo certbot certonlyComo antes, os certificados são salvos no diretório / etc / letsencrypt / live / yourdomainname.com /
Agora podemos configurar o Nginx para usar os arquivos neste diretório. Em primeiro lugar, vou me livrar do layout de diretório específico do Debian. O arquivo de configuração do site da página padrão é / etc / nginx / sites-available / default
subdiretório com um link simbólico para / etc / nginx / site-enabled
.
Vou apenas deletar o link simbólico e mover o arquivo de configuração para / etc / nginx / conf.d com um .extensão conf apenas para manter as coisas mais generalizadas e aplicáveis a outras distros também.
$ sudo rm / etc / sites-enabled / default$ sudo mv / etc / nginx / sites-available / default / etc / nginx / conf.d / default.conf
$ sudo service nginx restart
Vou modificar este arquivo de configuração padrão para demonstrar como o TLS está habilitado.
A seguir estão os conteúdos dentro do seu arquivo de configuração padrão, sem as seções comentadas. As seções destacadas são aquelas que você deve adicionar à configuração do seu servidor para habilitar o TLS e o último bloco neste arquivo de configuração detecta se o esquema está usando TLS ou não. Se o TLS não estiver sendo usado, ele simplesmente retornará um código de redirecionamento 301 para o cliente e alterará o URL para usar https. Dessa forma, você não perderá usuários
servidorescuta 80 default_server;
escute [::]: 80 default_server;
ouvir 443 ssl;
ssl_certificate / etc / letsencrypt / live / SUBDOMAIN.DOMÍNIO.TLS / fullchain.pem;
ssl_certificate_key / etc / letsencrypt / live / SUBDOMAIN.DOMÍNIO.TLD / privkey.pem;
ssl_session_cache compartilhado: le_nginx_SSL: 1m;
ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers ativado;
ssl_ciphers "ECDHE-ECDSA-CHACHA20-POLY1305: ECDHE-RSA-CHACHA20-POLY1305: ECDHE-
ECDSA-AES128-GCM-SHA256: ECDHE-RSA-AES128-GCM-SHA256: ECDHE-ECDSA-AES256
-GCM-SHA384: ECDHE-RSA-AES256-GCM-SHA384: DHE-RSA-AES128-GCM-SHA256: DHE-RSA-AES256
-GCM-SHA384: ECDHE-ECDSA-AES128-SHA256: ECDHE-RSA-AES128-SHA256: ECDHE-ECDSA-AES128
-SHA: ECDHE-RSA-AES256-SHA384: ECDHE-RSA-AES128-SHA: ECDHE-ECDSA-AES256-SHA384: ECDHE
-ECDSA-AES256-SHA: ECDHE-RSA-AES256-SHA: DHE-RSA-AES128-SHA256: DHE-RSA-AES128-SHA: DHE
-RSA-AES256-SHA256: DHE-RSA-AES256-SHA: ECDHE-ECDSA-DES-CBC3-SHA: ECDHE-RSA-DES-CBC3
-SHA: EDH-RSA-DES-CBC3-SHA: AES128-GCM-SHA256: AES256-GCM-SHA384: AES128-SHA256: AES256
-SHA256: AES128-SHA: AES256-SHA: DES-CBC3-SHA:!DSS ";
root / var / www / html;
índice de índice.índice html.índice htm.nginx-debian.html;
nome do servidor _;
localização /
try_files $ uri $ uri / = 404;
if (esquema de $ != "https")
return 301 https: // $ host $ request_uri;
Existem alguns parâmetros extras adicionados a este arquivo de configuração. Incluindo parâmetros que declaram o tempo limite, a versão TLS que você deve usar e quais criptografias o servidor usará. Isso foi emprestado das configurações recomendadas (mas opcionais) do Certbot para Nginx.
Agora, verifique se o arquivo de configuração é válido e reinicie o servidor.
$ sudo nginx -tnginx: o arquivo de configuração / etc / nginx / nginx.sintaxe conf está ok
nginx: arquivo de configuração / etc / nginx / nginx.O teste de configuração foi bem sucedido
$ sudo service nginx restart
Conclusão
Você pode aplicar a mesma abordagem para aplicativos e serviços da web mais complicados que precisam de HTTPS. Letsencrypt permite que você emita certificados para vários nomes de domínio ao mesmo tempo, e você pode hospedar vários sites por trás de seu servidor da web nginx com bastante facilidade. Se você seguiu o exemplo acima, tente acessar seu site usando http (http: // SUBDOMAIN.DOMÍNIO.TLD) e você será redirecionado para HTTPS automaticamente.
Para outros servidores da web, como o Apache, use o plug-in certbot apropriado ou consulte sua documentação oficial.