Certificados SSL con clave Para poder cuidar de la información que se transmite de un sitio web es usual utilizar el método de encriptación de la comunicación mediante certificados SSL, de manera que el sitio no pueda ser accedido por usuarios ajenos al mismo y cuando se intercambie información desde el sitio hasta el cliente la información sea de una manera segura, encriptándose por períodos para evitar el robo de datos por interceptación de la comunicación. En esta pequeña guía se describirá como elaborar los archivos que son necesarios colocar en la configuración de un sitio que requerirá su uso para una comunicación segura en el servidor web Apache2, utilizando la herramienta gráfica de TinyCA2, todo bajo GNU/Debian. Primero necesitamos instalar lo básico para este ejercicio: apt-get install apache2 tinyca Luego tendremos lo que necesitamos, para llamar en nuestra interfaz gráfica buscamos en el menú debian (para no enojar a los que prefieren algún escritorio :P), se encuentra en Debian > Aplicaciones > Herramientas > TinyCA, o lo llaman desde ejecutar comando con tinyca. Cuando se ejecuta por primera vez aparece una ventanita pidiendo crear la Autoridad Certificadora, el cual será nuestro primer paso, para ello hay que rellenar todos los datos del formulario. Los datos a colocar son bastante sencillos, solo hay que recordar bien la contraseña de la Autoridad Certificadora, porque mas adelante la utilizaremos para firmar peticiones de certificados de servidores y clientes. Luego pedirá el relleno de un segundo formulario con de los parámetros utilizados por el comando que crea los elementos a utilizar, a menos que se maneje la idea de tener una Autoridad Certificadora por oficio, no es necesario llenar los campos vacíos con las direcciones sugeridas para administrar políticas y revocaciones, por lo que con colocar none basta. Al darle aceptar puede que se tarde puede que no por generar entropía para la generación de claves RSA.
Nos avisará que la Autoridad Certificadora se ha creado. Luego podremos ver la interfaz de TinyCA, en el área de trabajo se encuentran las pestañas. Una vez poseyendo la Autoridad Certificadora tenemos que elaborar los certificados respectivos tanto como para el servidor Apache2 como para los clientes que se conectarán al sitio. Estos los crearemos desde la pestaña de Certificados haciendo clic en ella, para disponernos a crear los certificados necesarios La barra de herramientas cambia al seleccionar la pestaña permitiendo crear un nuevo certificado, al presionar sobre el botón nuevo en la barra de herramientas aparece un menú preguntando que si deseamos crear un certificado y clave para servidor o para cliente elegimos primero la creación del certificado del servidor. Aparecerá un formulario similar al de la creación de las Autoridades Certificadoras. Como en este caso es un certificado para un sitio donde aparece el nombre común es donde se puede poner la descripción, y en lugar de correo electrónico se asigna el nombre asociado al sitio. Esta contraseña es la asociada al servidor, en el proceso de exportación e incluye por lo que si la necesitan luego es bueno recordarla como la contraseña del servidor.
Dicha contraseña puede ser útil si se desea tener control del sitio web pues, se puede configurar de manera que pida dicha contraseña para iniciar el servicio en Apache para ese sitio. Justo como en el proceso anterior puede tardarse o no por la generación de la clave RSA. Luego de eso pedirá a la Autoridad Certificadora la petición de firmado, para ello hay que introducir la contraseña de la Autoridad Certificadora, y establecer el período de días de validez, por lo general es un año pero esto puede ser ajustado a la necesidad, porque el certificado del servidor puede durar mucho mas que el de un cliente o como se requiera en el caso específico. Al finalizar da el aviso de que se ha firmado el certificado generado, y se puede aprovechar para ver el comando que genera y firma el certificado, es bastante extenso, pero igualmente de didáctico. El resultado aparece en la lista de certificados, si se es curioso se puede comprobar que junto con el certificado en las otras pestañas quedan la respectiva clave y petición de firmado del certificado. El siguiente paso es crear el certificado del cliente, en el menú del botón Nuevo escoger ahora Crear Clave y Certificado (Cliente) al igual que en el anterior se llena el formulario de la misma manera pero para el cliente. Tomar en cuenta en este caso la contraseña del cliente, puesto que esta la utilizaremos para colocar los certificados en los clientes.
Nuevamente veremos la ventanita de creación de la clave RSA, tal cual se le indicó, para proceder luego con la firma del certificado usando la contraseña de la Autoridad Certificadora, que fue asignada de la misma manera para el certificado del servidor. Ya teniendo los dos certificados necesarios empezaremos a exportar los que se necesitan, el primer archivo que necesitamos es de la Autoridad Certificadora, al activar la pestaña de CA buscamos el botón en la barra de herramientas Exportar CA. Este archivo en particular sera usado para el servidor y el cliente. El certificado se deberá exportar en formato PEM, quedan guardados en el directorio de trabajo del usuario. Los mensajes de exportación dicen donde quedo el certificado el cual luego se moverá a las carpetas correspondientes. En la pestaña de Certificados se exportará el certificado del servidor haciendo clic derecho sobre el registro del correspondiente al servidor y se elige la opción de Exportar Certificado.
La exportación sera en formato PEM y debe incluir la llave como se muestra en la captura de pantalla, luego hay que dar clic a guardar. Este archivo sera utilizado solamente por Apache en el sitio a configurar. Ahora se tiene que exportar el certificado del cliente, al igual que el del servidor, siempre situados en la pestaña de Certificados hay que dar clic derecho sobe el registro del certificado del cliente y elegir la opción de Exportar Certificado, para esto necesitaremos recordar la contraseñas que utilizamos al generar el certificado del cliente. Los detalles a recordar son que el certificado deberá va a exportar en formato PKCS# 12, que es el que incluye el certificado y la clave, hay que verificar que se esta incluyendo la llave en formato PEM. Hay que colocar la contraseña del cliente para poder exportar esta será la que se utiliza cuando se instala en los navegadores clientes, debe de elaborarse sin la frase clave. Al finalizar dejara el archivo con extensión p12, por favor no hay que olvidar la contraseña del cliente porque es necesaria al momento de instalarla en cada cliente junto al certificado. Para finalizar hay que exportar la llave que utilizara el sitio en el servidor Apache, en la pestaña de Claves y seleccionar la clave correspondiente al servidor, luego con clic derecho sacar el menú contextual para elegir la opción de Exportar Clave. El detalle es que se necesita exportar la llave sin contraseña para que el no la solicite a cada reinicio de Apache.
El formato de la clave es PEM se debe seleccionar la opción de exportar sin la frase clave. Al darle guardar aparecerá un dialogo solicitando la contraseña del servidor, Finalmente se obtiene el último archivo que ocuparemos, esta guía esta un poco orientada a la creación de los ficheros para el servidor y el cliente, estos ya fueron realizados, pero además se mostrará una forma de colocarlo y medio configurar el sitio en Apache, para no caer en el uso de un determinado editor pueden hacerlo con el que mas deseen. Primero se disponen en forma ordenada los archivos generados, acá se muestra una lista de los archivos generados. En este ejemplo mediante fish:// accediendo como root siempre en entorno gráfico para dejar una estructura como la que se ve en la captura de pantalla de manera que en los directorios de /etc/apache2/ queden accesibles y fácilmente identificables. Creando una carpeta de certificados para almacenar los que corresponden ordenadamente a los sitios y dentro de la carpeta de cada sitio una carpeta para los archivos que ocupará el cliente y otra para los que ocupará el servidor. En este ejemplo como se pudo apreciar en todas las capturas de pantalla es un sitio ficticio pero para ser evaluado no se necesita tener un dominio configurado o algo que se le parezca. Se copia el sitio default que se encuentra en la carpeta /etc/apache2/sites-available a la misma carpeta con el nombre de sitio y una copia adicional con el nombre de sitioseguro. Quedando como resultado tres archivos dentro de la carpeta /etc/apache2/sites-available, solamente default, sitio y sitioseguro. Al archivo default se le eliminará todo su contenido y deberá poseer estas únicas lineas NameVirtualHost *:80 NameVirtualHost *:443 Al archivo sitio se le modificara para que su primeras dos líneas que son: NameVirtualHost * <VirtualHost *> Se sustituyan ambas por una sola línea: <VirtualHost *:80>
Y para el caso de sitioseguro donde se encuentra la siguientes lineas iniciales: NameVirtualHost * <VirtualHost *> Se sustituirán por estas líneas: <VirtualHost *:443> SSLEngine On SSLCACertificateFile /etc/apache2/certificados/ui-churute/servidor/ca-mish-cacert.pem SSLCertificateFile /etc/apache2/certificados/ui-churute/servidor/ui.churute.sv-cert.pem SSLCertificateKeyFile /etc/apache2/certificados/ui-churute/servidor/ui.churute.sv-key.pem SSLVerifyClient require SSLVerifyDepth 1 SSLOptions +FakeBasicAuth SetEnvIf User-Agent ".*MSIE.*" nokeepalive ssl-unclean-shutdown En el archivo /etc/apache2/ports.conf deberá contener estas dos líneas: Listen 80 Listen 443 Y para antes de reiniciar el servidor web apache tendremos que ejecutar estos comandos como root: a2ensite sitio a2ensite sitioseguro a2enmod ssl luego con toda confianza reiniciamos como root el servicio de apache mediante: /etc/init.d/apache2 restart Ahora solo queda comprobar el sitio y la instalación de los certificados en un cliente, por ser en GNU/Debian se utilizará IceWeasel. Primero comprobamos colocando en el navegador la dirección de localhost (automáticamente buscara primero el protocolo http). Como es de esperarse se hará una redirección a la careta apache2-default y mostrará el mensaje de que está funcionando.
Luego en una nueva pestaña pondremos la dirección incluiremos https://localhost, y damos al botón IR. Por ser mediante el protocolo seguro y por ser la primera vez solicitara que se guarde el certificado de encriptación de la comunicación: Se acepta para corroborar luego aparece un dialogo el cual hay que aceptar. Justo después podremos comprobar que no podemos acceder, porque a parte del error que muestra la ventana de dialogo, el mensaje del sitio no aparecerá y tampoco redireccionará a la carpeta apache2-default. Para instalar el certificado hay que ir al menú Editar y la opción Preferencias Abrirá el cuadro de dialogo de preferencias pero hay que acceder a la pestaña donde se dice Avanzadas y luego a una sub-pestaña que dice Encriptado, para poder hacer clic en el botón de Ver certificados
Aparecerá el administrador de certificados de donde primero se tendrá que importar la Autoridad Certificadora, desde la pestaña de Autoridades donde se da clic al botón Importar. Habrá que buscar en el cuadro de dialogo el archivo de la CA exportada. Luego se verifica que se debe confiar en la CA para los sitios web y dar al botón aceptar en el cuadro de dialogo. Al hacer esto, la Autoridad Certificadora que se creo se vera listada, cuesta un poco ubicarla dentro de la muchas que trae preinstaladas.
Luego hay que instalar el certificado de cliente, desde al ficha de Sus certificados. Al dar clic sobre el botón importar habrá que buscar el certificado del archivo p12. El navegador utiliza un sistema de contraseña maestra para la seguridad global, en este caso no se configurará, por lo que hay que dejar los campos en blanco y dar clic al botón Aceptar. Si es ese el caso aparecerá el mensaje de advertencia que informará que los datos no están protegidos (para el navegador). En este momento pedirá la contraseña de encriptación del certificado, la que se definió como contraseña del cliente para poder autenticarla, al colocarla verificara la contraseña y podrá desencriptar la información del certificado para poder ser instalado Si no aparece este mensaje es porque no se ha introducido la contraseña correcta, y hasta no ser así nos aseguramos que sólo los creadores del certificado pueden instalarlo.
El certificado aparecerá en el listado, y se puede verificar la fecha de expiración del mismo tal cual se definió cuando se generó. Solo queda comprobar que podemos acceder al sitio mediante el protocolo https y efectivamente lo redireccionará como lo dice el archivo de configuración a al carpeta apache2-default. Y aparecerá en la parte inferior derecha el icono respectivo al sitio seguro (un candado pequeño).
Existen varias formas de realizar esta misma tarea, la más práctica es por medio de comandos en la consola, hasta existen escripts para bash y algunos otros lenguajes que facilitan la tarea, el objetivo era lograrlo mediante una herramienta gráfica, no todo lo aquí planteado se hace mediante un método gráfico, puesto que el autor desconoce como administrar los servicios de Apache 2 con herramientas para el entorno gráfico, la linea inicial de instalación se puede hacer con synaptic, mas queda lograr hacer toda las tareas gráficamente, para los que poseen aversión al modo texto. Esta documentación es útil para muchos que inician en la administración de servidores web en GNU/Linux, deseándoles los mejores éxitos se pone a disposición del publico este documento para su mejora y libre distribución. Atentamente José David Calderón Serrano. Gato Nunca se tiene suficiente de algo bueno Documento realizado bajo GNU/Debian Hecho en OpenOffice.org Esta obra está bajo una licencia de Creative Commons Realizado para la documentación libre del grupo de usuarios Linux de la Universidad de El Salvador