Tutorial: Como criar os seus próprios certificados SSL
Nos dias que correm, é fundamental que todos os dados sensíveis, transaccionados entre um cliente (browser) e um servidor sejam cifrados de modo a que estes não possam ser entendidos por terceiros.
No caso dos servidores Web (entre outros serviços de uma rede), uma das formas de proceder à cifra dos dados é recorrendo ao protocolo SSL. Nesta área há empresas que vendem certificados, mas os utilizadores também podem criar os seus (apesar de não serem automaticamente reconhecidos pelos browsers).
O que é o SSL?
O SSL é um protocolo criptográfico baseado em cifras assimétricas (chave privada + chave pública), que tem como principal objectivo fornecer a segurança e integridade dos dados transmitidos em redes inseguras, como é o caso da Internet.
Quando um utilizador acede a um site que recorre ao SSL, o servidor envia ao cliente a chave pública deste para que esta possa cifrar a informação que vai ser passada ao servidor. Quando o servidor recebe essa informação, usa a sua chave privada para decifrar a informação transmitida pelo cliente.
Existem várias utilizações para este protocolo, como por exemplo o comércio electrónico, servidores Web, servidores FTP, etc. Para identificar facilmente se estão a visualizar um site seguro basta verificar no URL que em vez de estar o normal http:// se encontra https://- Saber mais aqui.
Como criar os seus próprios certificados SSL?
Neste tutorial vamos mostrar como podemos criar o nosso próprio certificado SSL e integrá-lo no Apache. Para tal devem seguir os seguintes passos:
Passo 1) Criar uma pasta onde vai guardar o certificado gerado:
sudo mkdir -p /etc/apache2/ssl |
Passo 2) Criar o nosso próprio certificado, usando o comando abaixo:
sudo openssl req -new -x509 -days 365 -nodes -out /etc/apache2/ssl/apache.pem -keyout /etc/apache2/ssl/apache.pem |
Passo 3) Uma vez criado o certificado, vamos aprender como o referenciar na configuração do Apache. Para começar vamos criar um link simbólico do certificado:
sudo ln -sf /etc/apache2/ssl/apache.pem /etc/apache2/ssl/`/usr/bin/openssl x509 -noout -hash < /etc/apache2/ssl/apache.pem`.0 |
Passo 4) Definir as permissões:
Vamos agora definir as permissões. Para este caso, vamos definir permissões de leitura e escrita para o dono do ficheiro do certificado
sudo chmod 600 /etc/apache2/ssl/apache.pem |
Passo 5) Criação de um virtual Host:
A criação de Virtual Hosts no Apache permite que numa única máquina possamos ter vários sites, sendo que cada um pode estar associado a um nome ou a um endereço IP.
sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/ssl |
Passo 6) Criação de um link simbólico do ficheiro ssl:
sudo ln -s /etc/apache2/sites-available/ssl /etc/apache2/sites-enabled/ssl |
Passo 7) Editamos o ficheiro SSL usando o nano (ou outro editor):
sudo nano /etc/apache2/sites-available/ssl |
No ficheiro indicamos onde se encontra o nosso certificado SSL criado.
<VirtualHost *:443> SSLEngine On SSLCertificateFile /etc/apache2/ssl/apache.pem ... </VirtualHost> |
Passo 9) Agora vamos ao ficheiro ports.conf e descomentamos a linha “Listen 443”:
sudo nano /etc/apache2/ports.conf |
Passo 10) Por fim ativamos o modulo SSL e reiniciamos o Apache:
sudo a2enmod ssl |
sudo service apache2 restart |
Passo 11) Testar:
Para testar, abrimos o brower e escrevemos https://localhost/, adicionamos o certificado, e de seguida confirmamos a excepção de segurança.
Como podemos ver pela imagem anterior, a ligação estabelecida ao servidor é segura, sendo usado o protocolo TLS.
Relativamente ao aviso “O certificado do servidor não é fidedigno” tal acontece porque o browser não conhece a nossa autoridade de certificação. Para tal, no primeiro aviso basta que indiquem que confiam na autoridade de certificação e que pretendem prosseguir. Caso a vossa distribuição não seja Debian-based, podem ver aqui como fazer.
Este artigo tem mais de um ano
Acho importante acrescentar ao artigo que se alguem quiser um certificado ssl completamente gratuito para qualquer plataforma e automaticamente aceite pelos browsers recomendo https://letsencrypt.org/
este é um projeto inovador e com suporte de todos os players de peso na industria. estou até admirado que ainda nao tenha sido feito um artigo sobre este projeto que ja funciona ha alguns meses.
Isso dava um excelente artigo aqui!
Bom tutorial para entender o processo. Mas para certificados gratuítos e confiáveis: https://letsencrypt.org/
Obrigado pela dica do letsencrypt. Não conhecia 🙂
A malta não liga muito a isto dos certificados mas se tiverem um site recomendo a compra de um certificado de uma entidade oficial e nunca um certificado autogerado
A tua informação revela que tens um conhecimento enorme na matéria…
Olha que J tem razão. Isto que foi mostrado aqui é um certificado de teste ou de desenvolvimento. Um certificado a sério deve ser validado até à base. Estes certificados autogerados devem ser apenas para testes.
letsencrypt, para a proxima ja sei onde vou tk.
https://en.wikipedia.org/wiki/Heartbleed
Como a maioria das operações é feita no diretório /etc/apache2/ssl, para simplificar, diminuindo o tamanho das linhas de comando, deveria haver um passo onde esse diretório é posto como de trabalho (work dir). Além disso os diversos comando são feitos pelo super-usuário (root), o que está implícito pelo uso do comando sudo, ao virar root direto, poupa-se a digitação disso também.
1) sudo su –
2) mkdir -p /etc/apache2/ssl
3) cd /etc/apache2/ssl
4) openssl req -new -x509 -days 365 -nodes -out apache.pem -keyout apache.pem
5) ln -sf apache.pem $(openssl x509 -noout -hash < apache.pem).0
6) chmod 600 apache.pem
…
Muito interessante, cara. Eu estava procurando um texto sobre isso, pois me questionei se é só as grandes empresas que podem fazer isso. Agora clareou a mente.
Gostei do texto 🙂
E quem tem um site alojado num servidor pago e que não tem acesso ao Linux para executar essas linhas de comando como fazer?
Minha hospedagem só aceita ssl pago gerado por ela mesma
Este tutorial irá servir para um servidor dedicado alojado nos serviços da (dominios.pt)????