Banner 1

Cómo crear un certificado SSL auto-firmado

Todos sabemos que, en una comunicación 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 fácil y, aunque existe muchísima documentación al respecto, siempre viene bien tener a mano una pequeña guía. A propósito de una reciente entrada de Akadia podemos ver cómo 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, también se puede utilizar para generar certificados auto-firmados que pueden ser utilizados para propósitos 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 certificación, tal como Thawte o Verisign, quien verificará la identidad del solicitante y expedirá un certificado firmado. La segunda opción es la de auto-firmar el CSR, que se demostrará a continuación.

Durante la generación del CSR, se pedirá varia información. 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 contraseña de la clave

Un desafortunado efecto secundario de la transmisión de una clave privada con contraseña (passphrase) es que Apache o el servidor web en cuestión 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 automáticamente. 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 opción más 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 sólo pueda ser leído 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 contraseña. 

-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 válido para 365 días, 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 configuración de Apache. La ubicación de este directorio será diferente en función de cómo 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
 
FUENTE: http://www.hackplayers.com 

No hay comentarios:

Powered by Bad Robot
Helped by Blackubay