Docker e certificados SSL

Este é um post rápido apenas para compartilhar uma forma de habilitar o uso de SSL para uma aplicação que esteja rodando em um container Docker.

Digamos que você tem uma aplicação docker exposta na porta 80 do seu servidor e precisa habilitar SSL para ela. Existem algumas maneiras de fazer isso, inclusive eu estive dando uma olhada nas opções abaixo:

São opções bastante interessantes, mas eu estava em busca de algo mais rápido para implementar. Então aqui vai a dica.

Obter um SSL

Nesse caso as opções eram:

  1. Comprar um certificado;
  2. Usar Let’s Encrypt;
  3. Usar CloudFlare.

Logo de cara a primeira opção já deixa de ser uma opção 😀

O Let’s Encrypt é uma excelente opção, mas acho chato ter que ficar renovando a cada 3 meses. Existem scripts pra automatizar isso eu sei, mas é mais uma variável no meio de tudo isso.

Então para isso eu usei o CloudFlare. Eles possuem um Free Universal SSL, que você pode usar gratuitamente. Dá uma olhada em: https://support.cloudflare.com/hc/en-us/articles/200170516-How-do-I-add-SSL-to-my-site-

De quebra ainda dá pra habilitar a CDN deles e ganhar proteção extra gratuitamente também. 😀

Uma vez que você já fez o cadastro no CloudFlare, habilitou seu DNS neles e finalizou essa parte, você pode baixar o  arquivo key e o crt. Feito isso vamos lá.

Configurando o Nginx

Neste caso eu optei por usar o Nginx fazendo proxy_pass para o Docker. A única alteração no Docker foi a porta onde a aplicação estava exposta, uma vez que estava na 80 e agora defini que fosse exposta na porta 8080. Abaixo os comandos para instalação e configuração do Nginx no Ubuntu:

Instalando os pacotes:

Criando o arquivo de configuração:

Definindo as configurações:

Note que coloquei o Nginx escutando na porta 80, respondendo pelo nome demoapp.azurelab.com.br. Todas as requests que chegarem na porta 80, são automaticamente redirecionadas para a porta 443. Mais ao fim, configuro o proxy_pass de modo que ele repasse as conexões para http://localhost:8080, que é a porta onde está rodando a aplicação Docker.

Finalizando os ajustes, criando o link para os sites habilitados e removendo a configuração default:

Fazendo restart do serviço:

Pronto, agora temos as requisições sendo redirecionadas para HTTPS e fazendo o proxy_pass para a porta 8080 onde está exposta a aplicação Docker.

Até a próxima!