next up previous contents
Next: Más allá Up: Implementación de una autoridad Previous: Creación y auto-firma de   Índice General

Creación e instalación de certificados para servidor Web

Este paso es muy similar al anterior, o aún más sencillo. La única particularidad es que tendremos que utilizar un servidor Web capaz de entender y procesar peticiones cifradas, utilizando el protocolo https en vez del http normal. Hay otras opciones, como utilizar SSL Wrap [11]1, pero éstas quedan rebasan el alcance de este texto. Por simplicidad, recomendamos la instalación de Apache+mod_ssl[12] - es software 100% libre, su instalación y configuración no presenta gran complejidad, y ofrece todas las características que podemos encontrar en cualquier servidor Web comercial. Para los usuarios de sistemas Linux, el paquete RPM de Apache+SSL (tanto precompilado como en fuentes) está disponible en http://www.modssl.org/contrib/

El primer paso que debemos dar es crear una solicitud de certificado. Crearemos nuestra llave privada y la petición. Normalmente, queremos que la llave este tan segura como sea posible, por lo cual la cifraremos con una contraseña. Tendremos que escribir esta contraseña cada que iniciemos nuestro servidor Web, lo cual puede ser bastante molesto, por lo que queda como opción el no encriptarla, para lo cual le agregaríamos la opción -nodes al final de la línea de comando.

$ /usr/local/ssl/bin/openssl req -new -keyout llave.pem -out solicitud.pem -days 360 -config /usr/local/ssl/openssl.cnf  
Using configuration from /usr/local/ssl/openssl.cnf  
Generating a 1024 bit RSA private key  
.++++++  
..++++++  
writing new private key to 'solicitud.pem'  
Enter PEM pass phrase: prueba 
Verifying password - Enter PEM pass phrase: prueba 
---  
You are about to be asked to enter information that will be incorporated  
into your certificate request.  
What you are about to enter is what is called a Distinguished Name or a DN.  
There are quite a few fields but you can leave some blank  
For some fields there will be a default value,  
If you enter '.', the field will be left blank.  
---  
Country Name (2 letter code) [AU]:MX  
State or Province Name (full name) [Some-State]:Estado de Mexico  
Locality Name (eg, city) []:Mexico  
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UNAM ENEP Iztacala  
Organizational Unit Name (eg, section) []:UPE 
Common Name (eg, YOUR name) []:www.iztacala.unam.mx 
Email Address []:gwolf@campus.iztacala.unam.mx 
 
Please enter the following 'extra' attributes  
to be sent with your certificate request  
A challenge password []: otrasecreta 
An optional company name []: UNAM ENEP Iztacala

Tenemos ya los dos archivos necesarios -- solicitud.pem y llave.pem. En solicitud.pem está la solicitud de certificado, y en llave.pem nuestra llave privada. Enviamos la solicitud a la autoridad certificadora para que la firme.

Para firmar una solicitud, la autoridad certificadora hará:

$ /usr/local/ssl/bin/openssl ca -policy policy_anything -out certificado.pem -config /usr/local/ssl/openssl.cnf -infiles solicitud.pem 
Using configuration from /usr/local/ssl/openssl.cnf  
Enter PEM pass phrase: ejemplo 
Check that the request matches the signature  
Signature ok  
The Subjects Distinguished Name is as follows country 
Name :PRINTABLE:'MX'  
stateOrProvinceName :PRINTABLE:'Estado de Mexico'  
localityName :PRINTABLE:'Mexico'  
organizationName :PRINTABLE:'UNAM ENEP Iztacala'  
organizationalUnitName:PRINTABLE:'UPE'  
commonName :PRINTABLE:'www.iztacala.unam.mx'  
emailAddress :IA5STRING:'gwolf@campus.iztacala.unam.mx'  
Certificate is to be certified until Jul 6 23:10:40 2001 GMT (365 days)  
Sign the certificate? [y/n]:y 
 
 
1 out of 1 certificate requests certified, commit? [y/n]y 
Write out database with 1 new entries  
Data Base Updated

Tenemos entonces por fin un archivo llamado certificado.pem, conteniendo aquello por lo que tanto nos hemos esforzado: Un certificado firmado por una autoridad certificadora. Ponemos ahora este archivo donde lo requiera nuestro servidor de Web, asi como la llave privada (solicitud-key.pem)2, y todo listo. Claro, no podemos dejar de recalcar la importancia de vigilar la seguridad de nuestra llave primaria, pues si cae en manos ajenas, podra suplantar nuestra identidad sin ningun problema, por lo que lo protegemos dando permiso de lectura solo para root:

chmod 500 ssl.key/

chmod 400 ssl.key/server.key

Como ya lo mencionamos anteriormente, si bien el certificado que acabamos de emitir es completamente válido y las sesiones SSL que se establezcan viajarán siempre encriptadas, los navegadores nos enviarán advertencias al entrar a un sitio protegido por éste certificado, puesto que la autoridad certificadora que lo emite no es reconocida internacionalmente. Este aviso se despliega tan pronto el navegador entra al sitio en cuestión y solicita una conexión segura:



\resizebox* {0.8\textwidth}{!}{\includegraphics{1.ps}}



A continuación, nos describe por qué opina que no es seguro recibir certificados de autoridades no reconocidas:







\resizebox* {0.8\textwidth}{!}{\includegraphics{2.ps}}

Si solicitamos más información, nos responde con todos los datos necesarios, tanto del certificador como del certificado, para corroborar que el certificado sea el correcto.





\resizebox* {0.8\columnwidth}{!}{\includegraphics{3.ps}}


next up previous contents
Next: Más allá Up: Implementación de una autoridad Previous: Creación y auto-firma de   Índice General
Gunnar Wolf
2000-12-15