Activar el soporte SSL a Microsoft IIS
Cuando navegamos por páginas Web, estamos siempre expuestos a que los datos
que transmitimos sean interceptados …..
Para evitar este problema, los servidores pueden activar la seguridad, de tal
modo que se encripta la comunicación, asegurándonos que nadie puede leer lo que
estamos enviando. Para algunos tipos de servicios, donde se intercambian datos
personales … esto es vital.
Os sonará que se utilizas https en vez
de http… es decir http con soporte seguro SSL
No vamos a profundizar en el proceso … ya que hay muchos libros que
explican la teoría. Vamos a mostraros de un modo práctico los pasos necesarios
para asegurar las comunicaciones entre cliente y servidor.
(No vamos a ser demasiado puristas en la explicación ……. la idea es que
todo el mundo lo entienda)
Muchos sistemas de seguridad se basan en el denominado «tercero de
confianza», es decir, un organismo o entidad que proporcione algo y que
reconozcan como válido las otras dos partes involucradas (vamos, como cuando
vas a la policia a que te compulsen un documento).
Para realizar comunicaciones seguras, hay que encriptar los mensajes
enviados. Se utiliza una técnica denominada clave asimétrica. Esto consiste en
que una parte gerena dos claves: Una privada que se guarda de un modo muy seguro
y una pública que se dá a todo el mundo. Estas claves están matemáticamente
relacionadas, de tal modo que lo que se codifica con una clave, solo se
desencripta con la otra.
En el mundo Web, este tercero de confianza se denomína CA (entidad
certificadora) la cual, previa presentación de documentacion notarial,
proporciona un fichero que asegura al cliente Web que el servidor es quien dice
ser (ya que no hay presencia física y nunca se puede estar seguro).
Este fichero es lo que se denomina un certificado digital (La entidad
certificadora emite y firma un certificado digital). Este certificado digital,
contiene, ademas de información identificativa del servidor, una clave
(la clave pública) del servidor Web. Como hemos dicho, esta clave es muy curiosa
ya que si se encripta algo con ella, solo nuestro servidor puede decodificarla
….
Asi que cuando un usuario desde un navegador se conecta a un Web seguro (que
tiene activada la seguridad), el servidor le manda el certificado. Como este
certificado ha sido emitido por la entidad certificadora, el navegador verifica
si es correcto o no.. y si es así ….. utiliza la clave pública de nuestro
servidor Web para encriptar mensajes y comunicarse con el servidor. Nadie más
que el servidor destino tiene capacidad de desencriptar la información ….
Lo vamos a dejar aqui … el movimiento se demuestra andando
Solicitar un Certificado Digital con IIS
Para poder instalar la seguridad (soporte https) en IIS, debemos ir a su
consola de administración y pinchar en propiedades
En la lengüeta de seguridad, pichamos en Server Certificate
IIS hace casi de modo automático todas las labores necesarias para solicitar
e instalar un certificado digital.
Esto consiste en generar una clave privada, una clave pública y enviar a la
entidad certificadora la clave pública para que la valide, firme y genere el
certificado.
Solicitamos generar un nuevo certificado
Podemos online solicitar a la CA directamente el certificado pero …
nosotros lo vamos a hacer más manual …
Ahora, vamos a rellenar los datos necesarios para generar el certificado …
nombre para reconocerlo y longitud de la clave.
Ahora rellenamos datos sobre la organización
Ahora, rellenamos el nombre de nuestra máquina. Este punto es vital porque
un certificado solo vale para un nombre de dominio válido.
Como estoy en un portatil … pogo el nombre de mi máquina
Introducimos la información geográfica
Comprobamos que los datos son los deseados y seguimos
Comprobamos que se ha generado y el nombre del fichero
Creamos una Entidad Certificadora
Si queremos obtener un certificado para nuestro servidor … deberemos
contactar con una empresa que los emita … o bien… si lo queremos solo para
probar o para usarlo en la intranet, nosotros podemos crear nuestra propia CA.
Lo vamos a hacer así…… para ello y sin profundizar más, necesitamos el
software para emitir y firmar certificados …..
Uno de los programas más distribuidos para esta labor se llama OpenSSL
Como podemos observar, OpenSSL viene en código fuente. No lo vamos a
compilar porque ya hay gente que lo hace por nosotros.
Buscamos una distribución ya compilada ……
Que suerte tenemos … asi que la instalamos (esto en entonos reales hay que
pensarselo mucho.. y verificar que nadie ha modificado los ficheros…. sería
lamentable que instalasemos software virulento en nuestro Web seguro ….).
Nos descargamos los ficheros e instalamos.
Hay que leerse la licencia
Seleccionamos el directorio destino
Y no nos tenemos que preocupar de mucho más (excepto de incluir el
directorio de trabajo en el path)
Generación de claves de la CA
El primer paso que debemos dar es generar una clave privada para la CA. Con
la clave privada de la CA… firmaremos la información enviada por el servidor
Web (descripción y clave pública del Web). Cuando un cliente reciba la clave
pública del Web, puede verificar que es correcto .. gracias a que esta firmado
por la CA
Sin enrollarnos más, generamos la clave privada… nos pide una contraseña
para protegerla
openssl genrsa -des3 -out cakey.pem 2048
La clave privada tiene un aspecto como este ….. no os la muestro entera
porque las claves privada …. son secretas 😉
Ahora, hay que crear un certificado digital de la CA que
contendrá información sobre la misma.. rellenamos toda la información que nos
pide. Por linea de comando decimos que es válido por un año
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 365
Vemos como queda el certificado
Ahora, creamos el certificado digital de nuestro Web …..
openssl x509 -req -days 365 -in certreq.txt -CA cacert.pem -CAkey cakey.pem -CAcreateserial -out iis.crt
Y vemos el certificado generado
Importar el certificado en IIS
Ahora, volvemos a abrir la ventana de certificados de IIS…
Y esta vez seleccionamos … procesar una petición pendiente
Indicamos el trayectos del certificado que hemos generado
Vemos que los datos son correctos
Y comprobamos que todo fue bien
Podemos ver ahora el certificado instalado
Y comprobamos el resultado. Podemos ver que nos advierte que no tiene
información necesaria para verificar el certificado …. eso es porque no
reconoce la CA (no esta dentro su lista de confianza.. aunque podriamos
añadirla, añadiendo su certificado)
Probar el servidor via HTTPS
Ahora accedemos al navegador.. https://localhost podemos ver que
que nos dice que hay algunos problemas …. fundamentalmente porque no reconoce
la CA …
Aceptamos y … ya está ….
nuestro servidor a través de SSL
En otros tutoriales.. veremos otras técnicas … como la tunelización
genérica de protocolos ….. y tuneles ssh, Estas técnicas nos permitirán
aumentar la seguridad de los sistemas ya construidos, aunque no tengan soporte
directo de seguridad.
Hola, gracias por el tutorial, me parece muy bien explicado. Me encuentro usando OpenSSL para generar un certificado, pero cuando quiero crear el certificado digital de mi web con el último comando, se me genera el siguiente error:
«8680:error:0906D06C:PEM routines:PEM_read_bio:no start line:cryptopempem_lib.c:691:Expecting: CERTIFICATE REQUEST»
Alguna idea de por qué me deja ejecutarlo? Estuve probando algunas variantes y también busqué ayuda con help sobre los comandos, soy nueva en esto y agradecería mucho alguna orientación.
saludos se puede hacer uso de certificados asimétricos en IIS como en apache (certificados cliente)
http://chuwiki.chuidiang.org/index.php?title=Crear_e_instalar_certificados_digitales_en_Apache_HttpServer