martes, 3 de febrero de 2009

Usando certificados SSL II

Utilizaremos el paquete Openssl para generar los certificados. De no tenerlo instalado publicare mas adelante otro articulo con ejemplos de cómo hacerlo, también hay mucha bibliografía de esto por la red por si estas apurad@.
Teniendo ya instalado el Openssl.
Primero creamos el certificado y la clave privada de nuestra autoridad de certificación:
1. req -x509 -newkey rsa:2048 -days 3650 -keyout CAXplotaKey.pem -out CAXplotacert.pem
Lo más importante de este comando es el parámetro days, ya que no queremos que dentro de un año nos caduque el certificado de nuestra propia entidad. Yo le pongo 10 años. Este comando genera dos archivos, la clave privada con la que firmaremos nuestros futuros certificados y el certificado con la clave pública que instalaremos, si queremos no recibir avisos, en el navegador. Este comando te pedirá algunos datos (nombre de empresa, país…) y, sobre todo, una contraseña. Deberás recordarla cada vez que vayas a firmar un certificado SSL, así que no la olvides. Ya tenemos nuestra CA creada.
Creamos ahora el certificado SSL para nuestro dominio (Servidor Web):
1. genrsa -des3 -out claveprivada.pem 2048
2. req -new -key claveprivada.pem -out certificado.pem
El primer comando crea la clave privada de nuestro certificado. Te pedirá otra contraseña, esta vez para la clave privada. Recuérdala también.
El segundo comando genera la petición de certificado sobre la clave privada anterior. Te pedirá la contraseña de la clave privada anterior. Es importante que el CN o Comun Name de este certificado sea la url del servidor web o servidor virtual es decir infosoc.cu, google.com, localhost, 127.0.0.1 etc.
De darte el error “Unable to load config info from /usr/local/ssl/openssl.cnf”, Es que seguramente estas trabajando en Windows debes especificar donde esta el archivo openssl.cnf con el comando –config y luego la dirección.
En este punto tenemos cuatro archivos, la clave y el certificado de tu CA y la clave y la solicitud de tu certificado SSL. Sólo queda firmar el certificado con nuestra CA y ya podremos utilizarlo.
Nota: En algunos casos pude no serte útil la clave de tu certificado en .pem así que puedes cambiarle el formato de esta manera:
1. rsa –in claveprivada.pem -out claveprivada.key

Para poder firmar la petición de certificado y así generar nuestro certificado debemos generar primero un fichero de texto con algunos parámetros de configuración:
cat configservidor.cnf
1. basicConstraints = critical,CA:FALSE
2. extendedKeyUsage = serverAuth
Y firmamos el certificado.
1. x509 -CA CAXplotacert.pem -CAkey CAXplotaKey.pem -req -extfile configservidor.cnf -in certificado.pem -days 3650 -CAcreateserial -sha1 -out certificado-servidor.pem
Ya tenemos un certificado SSL preparado para utilizar en nuestro servidor web. En nuestro caso es certificado-servidor.pem.
Certificados de cliente
Ahora que ya tenemos el certificado de nuestro servidor web (autofirmado) llega el momento de crear certificados para nuestros clientes de manera que si alguien intenta acceder a nuestra aplicación sin uno de ellos se le prohíba el paso.
Crearemos primero un archivo de configuración con los parámetros que necesitaremos.
cat configcliente.cnf
1. basicConstraints = critical,CA:FALSE
2. extendedKeyUsage = clientAuth
Con esto daremos instrucciones de que es un certificado cliente a la hora de firmar el certificado.
Creamos ahora, igual que hacíamos antes, la clave privada y la solicitud de certificado.
1. genrsa -des3 -out clave-cliente.pem 2048
2. req -new -key clave-cliente.pem -out certificado-cliente-req.pem
Como antes, al generar la clave te pedirá una contraseña que deberás introducir después, al hacer la solicitud de certificado. Los datos que te pide esta solicitud, como ocurría antes, los podrás leer posteriormente para comprobar datos o lo que estimes oportuno, así que es importante que prestes atención.
Firmamos ahora el certificado con nuestra CA:
1. x509 -CA CAXplotacert.pem -CAkey CAXplotaKey.pem -req -in certificado-cliente-req.pem -days 3650 -extfile configcliente.cnf -CAcreateserial -sha1 -out certificado-cliente.pem

Bien, pero ¿no quedamos que es el cliente el que debe instalar el certificado? Sí, ahí vamos ahora. El certificado que acabamos de generar lo debes instalar en tu navegador web, no en el servidor, así que habrá que convertirlo a algún formato que puedan entender. Para esto hacemos lo siguiente:
1. openssl pkcs12 -export -in certificado-cliente.pem -inkey clave-cliente.pem -certfile CAXplotacert.pem -out cliente.p12
Nos pedirá la contraseña de la clave privada del certificado y nos solicitará otra para el que va a generar. Es importante poner contraseña al certificado final ya que es el que vas a enviar a tus usuarios y pretendes que sólo estos puedan utilizarlo, así que poner una contraseña nunca está demás.

Esto es todo por ahora posteriormente les diré como configurar el servidor apache para que trabaje bajo https y pida los certificados de los clientes para poder ver los contenidos web.

No hay comentarios: