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