Su problema está en el lado del cliente. En una conexión SSL, el cliente debe usar la clave pública del servidor y, por lo tanto, debe asegurarse de que conoce la clave correcta ; el objetivo de un atacante sería inducir al cliente a utilizar una clave pública falsa. SSL define que el servidor envía su clave pública como parte de una cadena de certificados, que el cliente luego valida (el proceso complejo de verificación de firmas, fechas, estado de revocación y muchas extensiones). Pero un certificado válido no enseña mucho al cliente como a sí mismo; el cliente debe asegurarse de que conoce el certificado del servidor . Por lo tanto, el cliente debe buscar la "identidad esperada del servidor" en el certificado (válido).
Entonces tienes dos facetas importantes para el tema:
-
El certificado del servidor debe ser válido contra un conjunto dado de anclajes de confianza (también conocidos como "certificados raíz") en los que el cliente confía en a priori .
-
El certificado del servidor debe contener su identidad de manera que convenza al cliente.
En el contexto web habitual, el cliente es un navegador web, y el proveedor del navegador (o proveedor del sistema operativo) ya le ha proporcionado un gran conjunto de "CA raíz predeterminada". La coincidencia de identidad se describe en RFC 2818 : ya que el cliente intenta conectarse a una URL que incluye un nombre de host , el cliente buscará el mismo nombre de host en un par de lugares en el certificado (la parte CN del nombre del sujeto y en la extensión del Asunto Alt Name). Esto es donde los "nombres de dominio" tienen un impacto: el nombre que el cliente busca en el certificado es también el nombre que el cliente usa contra el DNS para saber dónde En realidad conectar.
Si controla el código del cliente y del servidor , puede elegir el mecanismo que desee. El cliente podría "conocer" la clave pública del servidor a priori (codificada en el código, o mediante un archivo de configuración local), e ignorar por completo el certificado del servidor. El cliente puede validar el certificado con respecto a cualquier conjunto de CA que considere adecuado, no necesariamente la misma CA que las que se incluyen en los navegadores web. Puede mantener el suyo propio: si eso es solo para sus servidores, CA emitirá un par de certificados por año como máximo, por lo que puede usar una tecnología bastante cruda (querrá mantenerla en un lugar seguro, pero puede usar software barato y procedimientos manuales; consulte, por ejemplo, EJBCA o incluso OpenSSL ). Y, por último, pero no menos importante, no es necesario buscar la identidad del servidor en los mismos lugares que lo que exige el RFC 2818. Por lo tanto, no existe un requisito estricto para jugar con nombres de dominio .
Si no controla el código del cliente (por ejemplo, el cliente es un navegador web o algún código de biblioteca existente que insiste en usar las mismas reglas que los navegadores web, es decir, RFC 2818), entonces Necesita, por definición, cumplir con los usos de la Web: enlace con nombres de dominio, certificados de una CA "reconocida" (una en la que confía el sistema cliente).