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:
- Servidor:
- Tutorial para registrar um domínio: Registro.BR e Google Domains
- Tutorial configurar DNS de domínio: Registro.BR e Google Domains
- 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
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/
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
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
Passo 6
Agora vamos finalmente instalar o Certbot com o gerenciador de pacotes snap, utilizando o seguinte comando:
sudo snap install --classic certbot
Passo 7
Precisamos agora criar um link logico do snap para a pasta usr:
sudo ln -s /snap/bin/certbot /usr/bin/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
Passo 9
Necessário agora reiniciar o apache, para que os arquivos de configuração do SSL fiquem ativos:
sudo service apache2 restart
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.
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!