Tutorial instalar certificado SSL grátis no Ubuntu com servidor Apache

Objetivos

  • Entender o que é um certificado SSL
  • Saber o que é o Ubuntu
  • Saber o que é o servidor Apache
  • Passo a passo para instalar certificados SSL Let’s Encrypt (grátis) no Sistema Operacional Ubuntu com servidor Apache

O que é um certificado SSL?

A sigla SSL vem do inglês “Secure Sockets Layer”, que pode ser traduzido para algo como “camada de soquete segura”.
Assim, o certificado SSL, na prática tem como objetivo ser uma camada de segurança entre o acesso do usuário pelo browser a um servidor web (website).
Com certeza todos nós já acessamos um site com certificado SSL ativo e válido, principalmente ao comprar online, ou acessando internet banking.
Uma forma de verificar se o site que está acessando utiliza certificado SSL é verificar se a URL começa com https://, tendo o caracter ‘s’ depois de http.
Uma curiosidade, atualmente é utilizado TLS – Transport Layer Security para garantir essa segurança ponta a ponta. Visto que desde a criação do protocolo SSL, vários problemas de brechas de segurança foram aparecendo e existindo então a necessidade de atualizações. Mas como o nome SSL ficou tão popular, ele ainda é utilizado para especificar a segurança entre as conexões com TLS.

O que é Ubuntu?

O Ubuntu descrito neste tutorial é a distribuição do Sistema Operacional Linux instalada no servidor. Porém o software Certbot utilizado para gerenciar os certificados SSL tem suporte a diversos sistemas operacionais. Caso utilize outro sistema operacional, basta acessar o site oficial do Certbot e verificar as recomendações de instalação.

O que é o servidor Apache?

O Apache (apache2) é o software utilizado para o servidor prover páginas web. Ou seja, é o software de servidor http utilizado. Existem diversos disponíveis no mercado, mas este tutorial irá descrever o passo a passo utilizando o Apache.

Requisitos para seguir o tutorial

Para ser possível seguir este tutorial à risca, é necessário que você já tenha registrado um nome de domínio. Além de registrar o nome de domínio, é necessário ter configurado corretamente o DNS deste nome de domínio para seu servidor. No seu servidor, é necessário já ter configurado os arquivos de configuração virtualhost do apache. Estamos realizando esta configuração em um servidor Ubuntu com Apache, então é recomendado que também utilize o mesmo sistema operacional (ou distribuição equivalente baseada em Debian).
Já abordamos todas as necessidades acima com um passo a passo em publicações anteriores:

  1. Servidor:
  2. Tutorial para registrar um domínio: Registro.BR e Google Domains
  3. Tutorial configurar DNS de domínio: Registro.BR e Google Domains
  4. Tutorial configurar domínio no Ubuntu com servidor Apache

Um detalhe da lista acima. No item 1 (Servidor) o primeiro item ensina a criar uma máquina virtual no seu computador local para funcionar como servidor; a segunda opção é semelhante a primeira, mas o servidor fica online na amazon (Free Tier grátis por 1 ano); o terceiro item é a configuração do servidor com os softwares necessários para seu funcionamento. Então se estiver começando do zero, você pode optar por ter o servidor no seu computador pessoal ou na nuvem, em seguida é necessário configurar ele com o terceiro item (configuração LAMP). As opções 2, 3 e 4 referentes ao domínio são necessárias também.

Tutorial instalar certificados SSL grátis no Ubuntu com servidor Apache

Passo 1

Primeiro passo é se conectar ao servidor por SSH. Neste tutorial realizamos a conexão através do prompt do Sistema Operacional. Estamos utilizando um servidor na Amazon AWS e vamos conectar por SSH utilizando a chave que configuramos:

ssh -i ChaveVPCaws.pem ubuntu@15.229.47.227

Lembrando que você deve se conectar ao seu servidor com suas próprias credenciais. É possível também se conectar com usuário@IP do servidor, sem necessidade de chave, caso seu servidor esteja configurado desta maneira:

ssh ubuntu@15.229.47.227

Ubuntu - Conectar no servidor por ssh utilizando chave de acesso

Passo 2

Agora é interessante verificar qual a versão do sistema operacional ubuntu está utilizando:

lsb_release -a

Neste exemplo, nosso servidor utiliza a Versão 22.04.1 LTS da distribuição Ubuntu do Linux.
Caso utilize outra distribuição, é possível ir no site do Certbot e verificar o passo a passo recomendado para seu setup. Mas no geral, caso utilize o Ubuntu, mesmo que em outra versão, o setup é praticamente o mesmo.
Caso queira saber mais sobre o Certbot, que é o software que vamos utilizar para automatizar o processo de instalação e configuração do certificado, é possível acessar o site do mantenedor:

https://certbot.eff.org/

Ubuntu - verificar versão do sistema operacional ubuntuWebsite oficial certbot

Passo 3

Para iniciar a instalação, o primeiro passo é instalar o gerenciador de pacotes snap. As últimas versões do Ubuntu já vem com o gerenciador de pacotes instalado, então não é preciso realizar esta etapa.

Passo 4

Para garantir que vamos instalar o Certbot na última versão, é interessante realizar o update e upgrade do snap:

sudo snap install core; sudo snap refresh core

Ubuntu - atualizar snap para ultima versão e atualizar pacotes

Passo 5

Um passo importante é garantir que você não possui o Certbot instalado por outro gerenciador de pacotes, como exemplo, o apt. Então nesta etapa vamos tentar desinstalar o Certbot pelo apt. Caso ele não esteja instalado, não tem problema algum, vai receber somente a informação que o pacote não está instalado pelo apt:

sudo apt-get remove certbot

Ubuntu - desinstalar o certbot pelo apt

Passo 6

Agora vamos finalmente instalar o Certbot com o gerenciador de pacotes snap, utilizando o seguinte comando:

sudo snap install --classic certbot

Ubuntu - instalar o certbot

Passo 7

Precisamos agora criar um link logico do snap para a pasta usr:

sudo ln -s /snap/bin/certbot /usr/bin/certbot

Ubuntu - criar link logico snap certbot

Passo 8

Agora precisamos recordar que no tutorial de configuração do domínio no servidor apache, criamos 3 arquivos de configuração para o domínio, mas só ativamos um. No nosso exemplo, estávamos configurando o domínio viniciuspaes.com.br e criamos os 3 arquivos abaixo:

  • viniciuspaes.com.br.http.conf (ativado)
  • viniciuspaes.com.br.ssl.conf (desativado)
  • viniciuspaes.com.br.www.ssl.conf (desativado)

Vamos caminhar até o diretório onde ficam os arquivos de configurações dos websites disponíveis:

cd /etc/apache2/sites-available

Com o comando abaixo, listamos os arquivos já previamente configurados no diretório:

ls -lah

Como podemos verificar, os 3 arquivos de configuração do domínio viniciuspaes.com.br estão presentes.

Agora que já temos o Certbot instalado para gerenciar os certificados grátis da Let’s Encript, podemos ativar os arquivos de configuração relativos ao SSL:

sudo a2ensite viniciuspaes.com.br.ssl.conf
sudo a2ensite viniciuspaes.com.br.www.ssl.conf

Ubuntu - ir até a pasta onde os arquivos de configuração de sites disponíveis do apache ficam armazenadasUbuntu - listar arquivos de sites disponíveis no apache
Ubuntu - ativar arquivo de configuração domínio com ssl
Ubuntu - ativar arquivo de configuração domínio com ssl e www

Passo 9

Necessário agora reiniciar o apache, para que os arquivos de configuração do SSL fiquem ativos:

sudo service apache2 restart

Ubuntu - reiniciar serviço Apache2

Passo 10

Tudo pronto agora para executar o certbot para solicitar e instalar os certificados grátis pelo Let’s Encript. Execute então o comando:

sudo certbot --apache

Na primeira execução, será necessário “criar uma conta”. Deverá cadastrar seu endereço de email (será enviado periodicamente o status dos seus certificados e algum problema caso não consigam renovar automaticamente). Em seguida vão apresentar os termos e condições de uso. E a terceira pergunta será pedindo permissão para compartilhar seu endereço de email de cadastro com terceiros. No nosso exemplo, inseri meu email, aceitei os termos e não tive o desejo de compartilhar meu email com terceiros.

Após estas etapas, no nosso exemplo, temos a opção de criar certificado para o domínio do exemplo (viniciuspaes.com.br) e para o subdomínio (www.viniciuspaes.com.br). Neste caso, o www é visto como um subdomínio.

Você então pode digitar o número de cada opção e teclar enter para ir instalando e configurando individualmente cada certificado, ou deixar em branco e teclar enter, para instalar todas as opções disponíveis.

Será perguntado se deseja criar o redirecionamento para forçar o acesso do usuário sempre por SSL (https). É uma ótima opção.

Ubuntu - executar o certbot para instalar certificados SSLUbuntu - criando conta certbotUbuntu - Certbot, escolher domínio para instalar SSL

Passo 11

Tudo pronto! Seu website já possui acesso com certificado SSL.

Abaixo segue algumas curiosidades do que o Certbot alterou automaticamente em seu arquivo de configuração.

Curiosidades

O que o Certbot alterou no arquivo de configuração para acesso http?

Para fins de curiosidade, as alterações realizadas automaticamente pelo Certbot no arquivo viniciuspaes.com.br.http.conf foi a inserção destas linhas:

RewriteEngine on
RewriteCond %{SERVER_NAME} =www.viniciuspaes.com.br [OR]
RewriteCond %{SERVER_NAME} =viniciuspaes.com.br
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]

Esta opção habilita o mod_rewrite, testa se o acesso ao website está sendo realizado pelo alias (www.viniciuspaes.com.br) ou pelo domínio principal (viniciuspaes.com.br), em seguida insere a regra de acesso com redirecionamento permanente. Se reparar, na regra o acesso é sempre com https (forçando o uso do SSL).

O que o Certbot alterou no arquivo de configuração para acesso ssl?

Para fins de curiosidade também, no arquivo de configuração SSL do domínio principal (viniciuspaes.com.br.ssl.conf), o Certbot inseriu estas linhas:

SSLCertificateFile /etc/letsencrypt/live/viniciuspaes.com.br/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/viniciuspaes.com.br/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Basicamente ele informa no arquivo de configuração o caminho do arquivo do certificado, o caminho da chave do certificado e inclui o arquivo de configuração das opções de SSL.

O que o Certbot alterou no arquivo de configuração para acesso ssl com www?

Basicamente a mesma coisa do item anterior, só que para o arquivo viniciuspaes.com.br.www.ssl.conf. Os arquivos de certificado e chave são diferentes. Pois ele entende que www é um subdomínio , então gera um certificado próprio para este acesso também:

SSLCertificateFile /etc/letsencrypt/live/www.viniciuspaes.com.br/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/www.viniciuspaes.com.br/privkey.pem
Include /etc/letsencrypt/options-ssl-apache.conf

Considerações Finais

O processo de instalação de certificados SSL é bem simples. Isto ocorre pois já deixamos os arquivos de configuração prontos quando configuramos o domínio no servidor. A criação destes arquivos pode parecer um pouco exagerada ou confusa, mas foi a maneira que funcionou melhor com o Certbot. Quando utilizava ServerAlias com WWW juntamente no arquivo de configuração com SSL, o Certbot se confundia na criação dos certificados e não atualizava corretamente os arquivos. Quando você tiver mais experiência em gerenciar os arquivos de configuração, é possível unificar todos os vhost em um arquivo e deixar o mais organizado possível. Mas se seguir o tutorial a risca, não terá problemas.

Conclusões

A utilização de encriptação SSL (TLS) em seu servidor é um passo importante, visto que os mecanismos de busca já sinalizaram que a segurança da troca de informações é relevante no ranking. Caso vislumbre utilizar e-commerce em seu website, é imprescindível ter o certificado instalado e configurado corretamente. Muitos gateways de pagamento exigem essa funcionalidade.

Teve algum problema no processo de instalar o certificado SSL em seu website? Não conseguiu executar alguma etapa deste tutorial? Deixa sua dúvida nos comentários e farei o possível para ajudar!