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.