Se debe tener algo en cuenta; si buscamos en Google por "Instalación y Configuración de OpenSSL en Debian" aparecerán muchos tutoriales de cómo hacer ésto, sin embargo muchos de éstos presentan comandos que no es necesario que se realicen.
Pongo el siguiente ejemplo: Nos daremos cuenta que muchas veces digitamos el comando x509 para firmar certificado, sin conocer que éste comando es para firmar certificados localmente, lo cual no tendría gracia. En terminos generales, debemos pensar en entornos reales, con varios equipos en red, si digitamos ese comando, simplemente estaremos firmando los certificado digitales a nivel local mas no a nivel de una LAN, etc, así que no nos serviriá de ésta forma.
Por ésto les explicaré la instalación de una forma que se emplea en entornos reales de red.
Debemos, como les decía para trabajar en entornos reales, instalar un DNS para que resuelva el nombre de la AC y los sitios Web a los que se le firmarán las respectivas peticiones de certificado.
Lo primero es instalar el paquete OPENSSL.
#apt-get install openssl
En la ruta /usr/lib/ssl/misc/CA.pl se encuentra el script para realizar la instalación de la Auntoridad Certificadora.
DEL LADO DE LA AC.
Primero ejecutamos el scrip para instalar la AC. Debemos tener en cuenta dónde nos encontramos parado en la consola, por lo que si nos paramos en /etc/ los directorios de la AC se instalarán en /etc/ Por ésto, en mi caso, me pararé en el directorio /opt/
/opt#/usr/lib/ssl/misc/CA.pl -newca
Aparecerá el siguiente enunciado.
CA certificate filename (or enter to create)
Presionamos enter para crear la autoridad la AC.
Enter PEM pass phrase: sena2009 (Establecemos la contraseña de la clave privada de la AC, luego la verificamos).
Country Name: CO (Digitamos las iniciales del pais).
State or Province Name: Antioquia (Digitar el Departamento o estado).
Locality Name: Medellin (Digitamos la localidad).
Organization Name: sena (Digitamos el nombre de la organización).
Orgainational Unit Name: teleinformatica (Digitamos el nombre de la unidiad organizativa).
Common Name: ca.rafa.com (Digitar el nombre común de la AC, el cual debe existir en los registro del DNS para que ésta pueda ser resuelta).
Email Address: admin@rafa.com (Digitar el correo del administrador de la red).
A challenge password: "Enter" (Ésto es para dar atributos extra a la AC).
An optional company name: "Enter".
Enter pass phrase for ./demoCA/private/cakey.pem: sena2009 (Digitar la contraseña que le establecimos al principio a la AC para poner a ésta en funcionamiento).
De inmediato podemos observar el sertificado que fué generado por la AC y firmado por ella misma.
Al instalar el directorio /opt/ creará el directorio "demoCA".
Para firmar peticiones de certificados debemos pararnos detras del directorio "demoCA". Para evitarnos ésta molestia, editamos el archivo de configuración de openssl para establecer la ruta obsoluta del directorio "demoCA".
#vim /etc/ssl/openssl.cnf
Buscamo el bloque [ CA_default ] justo debajo, cambiamos la linea.
dir = ./demoCA
Por.
dir = /opt/demoCA #(Ruta absoluta del directorio demoCA).
DEL LADO DEL SERVIDOR WEB.
En el servidor Web (Trabajaremos con Apache2) dentro del directorio apache2 crearemos el directorio "ssl" donde se almacenarán las llaves y certificados digitales de los sitios Web.
#mkdir /etc/apache2/ssl
Debemos crear un sitio Web, cuyo sitio Web debe estár escuchando por el puerto 443 (SSL), obviamente debemos poner también a apache por el puerto 443 en el archivo ports.conf (Se supone que ya debemos resolver éste problema de configuración). Les sugiero que comenten por completo el archivo /etc/apache2/sites-available/default para que no presente el problema que todo se esté redireccionando a "IT WORKS".
Ahora para hacer una petición de certificado a la AC.
Generamos la petición. Nos paramos dentro del directorio /etc/apache2/ssl/
#cd /etc/apache2/ssl/
#openssl req -newkey rsa:1024 -out req.sitioweb.pem
Digitamos la clave privada para éste sitio Web "12345", la verificamos y llenamos los datos correspondientes teniendo encuenta el Common Name será "sitioweb.dominio.com", el cual debe existir en los registro del DNS.
Ahora, en el directorio /etc/apache2/ssl/ aparecerá la llave privada del sitio Web "privkey.pem" y la petición de certificado "req.sitio.pem".
El "req.sitio.pem" o petición de certificado, se lo debemos enviar a la AC, ya sea por SCP, o por cualquier medio seguro.
DEL LADO DE LA AC.
Para firmar ésta solicitud de certificado, llevamos ésta solicitud al directorio /opt/demoCA/certs/ y nos posicionamos sobre el mismo.
#cd /opt/demoCA/certs/
#openssl ca -in req.sitio.pem -out cert.sitio.pem
Pedirá que digitemos la clave privada de la CA para que pueda firmas ésta petición "sena2009".
Si listamos el contenido del directorio "certs" podremos ver el certificado para éste sitio Web.
Ahora debemos enviarle éste certificado al servidor de Apache.
DEL LADO DEL SERVIDOR WEB.
Mover el certificado "cert.sitio.pem" al directorio /etc/apache2/ssl/
En el sitio Web que creamos debemos agregar los módulos SSL (En el sitio que pusimos a escuchar por el puerto 443 debemos).
#vim /etc/apache2/sites-available/sitioWeb
Agregar las siguientes líneas.
SSLEngine on
SSLCertificateFile /etc/apache2/ssl/cert.sitio.pem
SSLCertificateKeyFile /etc/apache2/ssl/privkey.pem
Ahora debemos habilitar el sitioWeb y los módulos SSL de Apache2
#a2ensite sitioWeb
#a2enmod rewrite
#a2enmod ssl
Reiniciamos el servicio de Apache2
#/etc/init.d/apache2 restart
Ahora debemos importar el certificado de la AC al navegador para que no presente ilegalidades al ingresar al sitioWeb.dominio.com. El certificado de la AC.
#/opt/demoCA/cacert.pem
Al momento de digitar en nuestro navegado https://sitioweb.dominio.com debe mostrarnos el contenido del sitio Web que creamos y de forma segura.
HACER QUE QUE EL SERVIDOR WEB REQUIERA CERTIFICADO POR PARTE DEL CLIENTE. DEL LADO DEL CLIENTE LINUX.
Para que el cliente Linux genere la petición de certificado, simplemente se genera de la misma forma como se genera una petición para un servicio Web. La sintanxis no cambia.
~#/openssl req -newkey rsa:1024 -out req.sitiocliente.pem
Igualmente se le enviá la petición de certificado "req.sitiocliente.pem" a la AC.
DEL LADO DE LA AC.
Movemos la petición de certificado de tal forma que lo ubiquemos en el directorio /opt/demoCA/certs/; y nos paramos en éste mismo.
Para firma la petición de certificado de un cliente, se debe firmar con una exetención diferente. Por lo tanto debemos habilitar ésta función en el archivo de configuración del servico OpenSSL.
#vim /etc/ssl/openssl.cnf
Buscar el bloque [ v3_req ] Cambiarlo de ésta forma.
[ v3_req ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
A ésta.
[ v3_cliente ] # Extensions to add to a certificate request
basicConstraints = CA:FALSE
#keyUsage = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage = ClienteAuth
Ahora ya la AC está habilitada para firmar peticiones de certificados por parte del cliente. Para firmar el certificado.
#openssl ca -in req.sitiocliente.pem -extensions v3_cliente -out cert.sitiocliente.pem
La AC le pasa el certificado al cliente Linux.
DEL LADO DEL CLIENTE LINUX.
Ahora el cliente debe exportar el certifica al formato .p12 para ya que el formato .pem no es soportado por los navegadores (Convertir de .pem a .p12).
Ahora, se debe tener el certifcado del cliente "cert.sitiocliente.pem", el certificado de la AC "cacert.pem" y la llave privada "privkey.pem" que el cliente generó al momento de general la petición de certificado.
~#openssl pkcs12 -export -in cert.sitiocliente.pem -inkey privkey.pem -certfile cacert.pem -out cert.sitiocliente.p12
El certificado cert.sitiocliente.p12 es el que se importará al navegador.
Pero aún falta algo.
DEL LADO DEL SERVIDOR WEB.
Para que el sitio Web requiera certificado se procede con la siguiene configuración.
#mkdir /etc/apache2/sslcacerts
Debemos obtener el certificado de la AC y ponerlo en la ruta /etc/apache2/sslcacerts/
Editar el sitio Web que está seguro.
#vim /etc/apache2/sites-available/sitioWeb
Agregar las siguientes líneas.
SSLCACertificatePath /etc/apache2/sslcacerts/
SSLVerifyClient require
Reiniciamos el servicio Web, y ya deberían funcionar todos éstos requerimientos.
Se dieron cuenta que no fué necesario de darle el comando x509?
Listo. Ya hemos configurado OpenSSL de una forma adecuada.