Los pasos que se detallan a continuación han sido realizados en Arch Linux 0.8 (Voodoo), con Apache 2.2.3-2 y OpenSSL 0.9.8d-1.
1. Generar CLAVE PRIVADA:
Llamaremos a nuestro servidor p.ej. ciberia (sustituye "ciberia" por el nombre-url del tuyo). Para generar una clave privada RSA protegida por contraseña:
$ openssl genrsa -des3 > ciberia.key
La protección de la clave por contraseña (para lo que puedes utilizar también AES) presenta el inconveniente de que tendrás que teclear esta contraseña cada vez que arranques el servidor y que si la olvidas se acabó.
Por eso, si prefieres la comodidad a la máxima seguridad (por ejemplo, se trata de tu servidor de pruebas) y estás "seguro" de que la clave no va a caer en malas manos (o no importa), puedes optar por no proteger con contraseña:
$ openssl genrsa > ciberia.key
2. Generar CSR (CERTIFICATE SIGNING REQUEST):
Ahora generamos una petición para enviar a una Autoridad de Certificación y solicitar que firme nuestra clave y nos devuelva un certificado.
$ openssl req -new -key ciberia.key > ciberia.csr
Responde a las preguntas sobre país, provincia. ciudad, empresa, nombre y e-mail.
El fichero generado podrías enviarlo a una autoridad de certificación (como Verisign, de pago, o CACert, gratuita aunque no del agrado de Microsoft) para que lo firmaran y te enviaran tu certificado, pero haremos algo aún mejor: crearemos nuestra propia autoridad de certificación.
3. Crear nuestra propia AUTORIDAD DE CERTIFICACIÓN (CA):
$ /etc/ssl/misc/CA.pl -newca
(ojo: el path a CA.pl puede ser distinto en tu distribución).
Presiona Enter y propociona la que será contraseña de acceso a la clave privada de esta nueva autoridad. Proporciona país, provincia, ciudad, etc. para esta autoridad.
Enhorabuena. Ya eres el feliz propietario de una flamante "Autoridad de Certificación", contenida en el nuevo directorio demoCA. El fichero cacert.pem contiene su clave pública, mientras que en private/cakey.pem dispones de la clave privada que te permitirá crear certificados para tus "clientes".
4. CREAR CERTIFICADOS:
Como ejemplo, empecemos por firmar el CSR que generaste en el paso 2.
$ openssl ca -policy policy_anything -out ciberia.crt -infiles ciberia.csr
Introduce la contraseña de tu autoridad cuando se te pida. Pulsa 'Y' cuandos se te pregunte si deseas firmar e 'Y' también para ejecutar (commit) el cambio en tu base de datos.
Vamos a generar también un certificado autofirmado para tu propia autoridad certificadora (en el apartado 6 verás para qué). Sitúate en el directorio de tu autoridad (demoCA) y teclea:
$ openssl x509 -req -days 365 -in careq.pem -out cacert.crt -signkey ./private/cakey.pem
5. AÑADIR CERTIFICADO AL SERVIDOR WEB (Apache 2):
cp ciberia.key /etc/httpd/conf cp ciberia.crt /etc/httpd/conf
Editar /etc/httpd/conf/httpd.conf para descomentar la línea que permite incluir httpd-ssl.conf
Editar /etc/httpd/conf/extra/httpd-ssl.conf para añadir el nombre, email del administrador y puerto de nuestro servidor y editar las líneas de clave y certificado para que digan así:
SSLCertificateFile /etc/httpd/conf/ciberia.crt SSLCertificateKeyFile /etc/httpd/conf/ciberia.key
Sólo resta arrancar de nuevo el servidor y conectarse a https://ciberia (o el nombre de tu servidor) para comprobar que funciona.
6. NAVEGADORES WEB:
Si ejecutaste los pasos anteriores (y todo ha ido bien) verás que al acceder por primera vez a tu servidor "seguro" el navegador duda de la autenticidad de tu flamante certificado, porque en última instancia duda de tu autoridad certificadora.
La solución consiste en colocar el certificado de tu autoridad (cacert.crt) en algún sitio del servidor, donde pueda ser accedido -o descargado- por los navegadores de tus visitantes. En el caso de Opera y Firefox, al pulsar el enlace el navegador preguntará si aceptas esa nueva autoridad para certificar sitios web, a lo que has de responder (obviamente) 'Sí'. En Explorer has de importar el certificado siguiendo los pasos que te propone el asistente del propio navegador.