PKI privada (CA + Certificados) em Apache

Autor: Ilídio Vicente

Configuração de um servidor como CA e web SSL

Pretende-se com este trabalho configurar um servidor como Autoridade de Certificação (CA) e como servidor web com SSL.
O servidor usado é o ubuntu 10.04 (Lucid Lynx) server. O cliente pode ser qualquer um que permita a utlização de um browser com suporte para SSL. Neste trabalho foi usado o Mozilla Firefox a correr em ubuntu 11.04 (Natty Narwhal).
O servidor precisa que estejam instalados os pacotes openssl e apache2.
Vamos assumir que o servidor funciona no endereço www.redes.pt.
Para este trabalho foi criada uma entrada no ficheiro hosts tanto do servidor como do cliente, para que o endereço www.redes.pt apontasse para o ip do servidor.
Depois de cumpridos estes requisitos é necessário:
  1. Gerar autoridade de certificação
  2. Instalar a autoridade de certificação
  • no cliente
  • no servidor
  1. Criar um certificado para o servidor
  2. Configurar o site seguro usando o certificado gerado.

1. Gerar autoridade de certificação

Primeiro é necessário criar um par de chaves de encriptação. Vamos usar o algoritmo 3DES com 4096 bits.
openssl genrsa -des3 -out ca.key 4096
As chaves ficam armazenadas no ficheiro ca.key.
De seguida vamos usar essa chave para criar um certificado autoassinado, isto é, a própria entidade que requere o certificada é a entidade que o assina. O certificadao é do tipo X.509 com uma validade de 365 dias.
openssl req -new -x509 -days 365 -key ca.key -out ca.crt
O certificado fica em ca.crt.

2. Instalar a autoridade de certificação

2.1. Cliente

É necessário enviar o ficheiro ca.crt (através de pen, e-mail, etc) para o cliente.
No Firefox ir a Editar » Preferências » Avançado » Ver certificados » Importar, e importar o certificado.

2.2. Servidor

Copiar o ficheiro ca.crt para /etc/ssl/certs e ca.key para /etc/ssl/private

3. Criar um certificado para o servidor

Primeiro é preciso criar um par de chaves para o servidor web. Vamos criar chaves 3DES com 2048 bits.
openssl genrsa -des3 -out www.redes.pt.key 2048
O nome do servidor foi usado como nome do ficheiro, mas tal não é obrigatório.
Vamos agora fazer um pedido para que a CA assine digitalmente a chave de encriptação.
openssl req -new -key www.redes.pt.key -out www.redes.pt.csr
O requerimento fica em www.redes.pt.csr
Agora a CA vai assinar o pedido, criando o certificado:
openssl x509 -req -days 365 -in www.redes.pt.csr -CA ca.crt -CAkey ca.key -set_serial 01 -out www.redes.pt.crt
O certificado fica em www.redes.pt.crt.
O Common Name (CN) do certificado do servidor TEM de ser www.redes.pt.
Copiamos agora o ficheiro www.redes.pt.crt para /etc/ssl/certs e o ficheiro www.redes.pt.key para /etc/ssl/private

4. Configurar o site seguro usando o certificado

É preciso activar o módulo SSL no Apache, copiando os ficheiros ssl.conf e ssl.load de /etc/apache2/mods-available para /etc/apache2/mods-enabled.
Editamos o ficheiro /etc/apache2/mods-enabled/ssl.conf e criamos um virtualhost, dentro da secção IfModule.../IfModule.
Vamos criar o site www.redes.pt, alojado em /var/www/seguro.
O virtualhost deve conter pelo menos, as seguintes directivas:
<VirtualHost exemplo.dominio.topo:443>
   DocumentRoot “/var/www/seguro”
   ServerName www.redes.pt:443
   ServerAdmin root@redes.pt
   ErrorLog logs/ssl_error_log
   TransferLog logs/ssl_access_log
   SSLEngine on
   SSLCipherSuite
   ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
   SSLCertificateFile /etc/ssl/certs/www.redes.pt.crt
   SSLCertificateKeyFile /etc/ssl/private/www.redes.pt.key
</VirtualHost>
Outros comandos de interesse
openssl rsa -noout -text -in server.key
Mostra o conteúdo da chave server.key
openssl req -noout -text -in server.csr
Mostra o conteúdo do pedido de certificado server.csr
openssl x509 -noout -text -in ca.crt
Mostra o conteúdo do certificado ca.crt
openssl rsa -in server.key -out server-nopass.key
Retira a password da chave.

Comentários