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:
A continuación, nos describe por qué opina que no es seguro recibir certificados de autoridades no reconocidas: