You are on page 1of 3

Cmo crear un certificado SSL auto-firmado

Publicado por Vicente Motos on viernes, 26 de octubre de 2012 Etiquetas: criptografa , tutoriales

Todos sabemos que, en una comunicacin SSL cifrada, el certificado firmado


por una Entidad Certificadora Autorizada (CA) nos asegura que el otro
extremo es realmente quien dice ser. No obstante, muchas veces nos interesa
generar un certificado auto-firmado para pruebas o uso interno.
Con openssl y un Unix/Linux es realmente fcil y, aunque existe muchsima
documentacin al respecto, siempre viene bien tener a mano una pequea
gua. A propsito de una reciente entrada de Akadia podemos ver cmo
hacerlo paso a paso:
Paso 1: Generar una Clave Privada
El kit de herramientas de OpenSSL se utiliza para generar una clave RSA
privada y un CSR (solicitud de firma de certificado). Pero, como comentamos,
tambin se puede utilizar para generar certificados auto-firmados que pueden
ser utilizados para propsitos de prueba o de uso interno.
El primer paso es crear tu clave privada RSA. Esta clave es una clave de 1024
bits RSA que se cifra usando Triple-DES y se almacena en formato PEM de
modo que sea legible como texto ASCII.
openssl genrsa -des3 -out server.key 1024
Generating RSA private key, 1024 bit long modulus
.........................................................++++++
........++++++
e is 65537 (0x10001)
Enter PEM pass phrase:
Verifying password - Enter PEM pass phrase:
Paso 2: Generar un CSR (solicitud de firma de certificado)
Una vez que hemos creado la clave privada, se puede generar una solicitud de
firma de certificado. El CSR se puede utilizar entonces de dos maneras.

Idealmente, el CSR se enviar a una autoridad de certificacin, tal como


Thawte o Verisign, quien verificar la identidad del solicitante y expedir un
certificado firmado. La segunda opcin es la de auto-firmar el CSR, que se
demostrar a continuacin.
Durante la generacin del CSR, se pedir varia informacin. Estos son los
atributos X.509 del certificado. Uno de los mensajes nos pedir el Common
Name. Es importante que este campo se rellene con el nombre de dominio
completo del servidor que va a estar protegido por SSL. Es decir, si el sitio web
ser https://publico.prueba.com, introduce publico.prueba.com. El comando
para generar el CSR es el siguiente:
openssl req -new -key server.key -out server.csr
Country Name (2 letter code) [GB] :SP
State or Province Name (full name) [Berkshire] :Madrid
Locality Name (eg, city) [Newbury] :Madrid
Organization Name (eg, company) [My Company Ltd] :Hackplayers
Organizational Unit Name (eg, section) [] :Information Technology
Common Name (eg, your name or your server's hostname) []
:publico.prueba.com
Email Address [] :hackplayers at ymail dot com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Paso 3: Borrar la contrasea de la clave
Un desafortunado efecto secundario de la transmisin de una clave privada con
contrasea (passphrase) es que Apache o el servidor web en cuestin te pedir
la frase de paso cada vez que se inicie el servidor web. Obviamente, esto no
siempre es conveniente, sobretodo si el servidor se reinicia automticamente.
mod_ssl incluye la capacidad de utilizar un programa externo en lugar de
escribir la frase a mano, sin embargo, esto no es necesariamente la opcin
ms segura tampoco. Es posible eliminar el cifrado triple-DES de la clave para
que no sea necesario escribir una clave. Eso s, si la clave privada ha dejado de
estar cifradas, es fundamental que este archivo slo pueda ser ledo por el
usuario root!. Si un tercero obtuviera la clave privada sin cifrar, el certificado
correspondiente deber ser revocado. Para quitar la frase de paso de la clave,
utiliza el siguiente comando:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
El nuevo fichero creado server.keyya no tiene contrasea.
-rw-r--r-- 1 root root 745 Jun 29 12:19 server.csr
-rw-r--r-- 1 root root 891 Jun 29 13:22 server.key
-rw-r--r-- 1 root root 963 Jun 29 13:22 server.key.org

Paso 4: Crear un certificado auto-firmado


En este punto ya podemos generar el certificado auto-firmado. Hay que decir
que, evidentemente, este certificado generar un error en el navegador del
cliente en el sentido de que la autoridad de certificado de firma es desconocida
y no confiable.
Para generar un certificado vlido para 365 das, ejecutaremos el siguiente
comando:
openssl x509 -req -days 365 -in server.csr -signkey server.key
-out server.crt
Signature ok
subject=/C=SP/ST=Madrid/L=Madrid/O=Hackplayers/OU=Information
Technology/CN=publico.prueba.com/Email=hackplayers at ymail dot
com
Getting Private key
Paso 5: Instalar la clave privada y el certificado en Apache
Cuando se instala Apache con mod_ssl, se crean varios subdirectorios en el
directorio de configuracin de Apache. La ubicacin de este directorio ser
diferente en funcin de cmo se compil Apache.
cp server.crt /usr/local/apache/conf/ssl.crt
cp server.key /usr/local/apache/conf/ssl.key
Paso 6: Configurar host virtuales con SSL activado
SSLEngine on
SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/server.key
SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
Paso 7: Reiniciar Apache y probar
/etc/init.d/httpd stop
/etc/init.d/httpd stop
https://publico.hackplayers.com

You might also like