Linux

Tutorial: Como criar os seus próprios certificados SSL

13 Comentários

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).

ssl_12

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

ssl_00

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

ssl_01

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

ssl__02

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

SSL_03

Passo 7) Editamos o ficheiro SSL usando o nano (ou outro editor):

sudo nano /etc/apache2/sites-available/ssl

ssl_04

No ficheiro indicamos onde se encontra o nosso certificado SSL criado.

<VirtualHost *:443>

SSLEngine On

SSLCertificateFile /etc/apache2/ssl/apache.pem

...

</VirtualHost>

ssl_05

Passo 9) Agora vamos ao ficheiro ports.conf e descomentamos a linha “Listen 443”:

sudo nano /etc/apache2/ports.conf

ssl_06

Passo 10) Por fim ativamos o modulo  SSL e reiniciamos o Apache:

sudo a2enmod ssl

ssl_07

sudo service apache2 restart

ssl_08

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.

SSL_09

 

Como podemos ver pela imagem anterior, a ligação estabelecida ao servidor é segura, sendo usado o protocolo TLS.

SSL_11

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.

Autor: Pedro Pinto
Partilhar:
Também pode gostar

Comentários

13

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *

  1. Avatar de Jonas
    Jonas

    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.

    1. Avatar de Gonçalves
      Gonçalves

      Isso dava um excelente artigo aqui!

  2. Avatar de LG
    LG

    Bom tutorial para entender o processo. Mas para certificados gratuítos e confiáveis: https://letsencrypt.org/

  3. Avatar de Bob
    Bob

    Obrigado pela dica do letsencrypt. Não conhecia 🙂

  4. Avatar de J
    J

    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

    1. Avatar de M
      M

      A tua informação revela que tens um conhecimento enorme na matéria…

      1. Avatar de Pedro Fernandes
        Pedro Fernandes

        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.

  5. Avatar de sakura
    sakura

    letsencrypt, para a proxima ja sei onde vou tk.

    https://en.wikipedia.org/wiki/Heartbleed

  6. Avatar de Xinuo
    Xinuo

    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

  7. Avatar de PVH Digital
    PVH Digital

    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 🙂

  8. Avatar de Ricardo Magalhães
    Ricardo Magalhães

    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?

  9. Avatar de Marcos A C G Alcântara
    Marcos A C G Alcântara

    Minha hospedagem só aceita ssl pago gerado por ela mesma

  10. Avatar de jsvenancio
    jsvenancio

    Este tutorial irá servir para um servidor dedicado alojado nos serviços da (dominios.pt)????