security - qué - Implicaciones de seguridad de deshabilitar la comprobación de nombre común para HTTPS
los certificados autofirmados generarán alertas en el navegador. (6)
Estoy revisando algún código de cliente que heredé para hacer una comunicación segura a través de HTTPS, y parece que no está verificando el nombre común en el certificado del servidor (por ej., ''CN ='' example.com '''' contra la URL real que está Esto es probablemente deliberado, ya que se requiere que nuestra aplicación cliente hable con varios entornos, por lo que después de contactar un portal inicial (por ejemplo, example.com/main) y el usuario elige un entorno, la aplicación se redirecciona a una IP específica. entonces todas las solicitudes futuras se verán como " http://127.0.0.1/page ".
Sin embargo, al ser un novato de SSL, no estoy seguro de las implicaciones de deshabilitar este control. Mi primera reacción sería que sería más fácil realizar algún tipo de ataque de hombre en el medio, ya que alguien más podría simplemente copiar nuestro certificado y pretender ser uno de nuestros servidores. Pero si estuviéramos haciendo una comprobación de nombre común, podrías hacer lo mismo con la configuración de DNS personalizada de todos modos, así que no parece que nos gane nada. ¿Hay otros ataques que nos dejen abiertos a lo que no seríamos de otra manera?
Gracias
Para hacer lo mismo con "configuraciones de DNS personalizadas", el atacante debería explotar un servidor DNS (el suyo o el de un cliente) para apuntar example.com a una IP que controle, en lugar de solo copiar el certificado. Si es posible, crearía todas las aplicaciones específicas como subdominios de example.com y usaría un certificado comodín (* .example.com) para poder validar el CN.
$ 0.02: el uso de CN para los nombres de host está en desuso, en su lugar se deben usar los nombres alternativos de sujeto X.509.
La verificación del nombre de host (verificación de la parte del CN) garantiza que el otro extremo de la conexión (servidor) tenga un certificado SSL con el nombre de dominio que escribió en la barra de direcciones. Normalmente, un atacante no podrá obtener dicho certificado.
Si no verificas la parte del nombre de host, alguien (alguien sentado en cualquiera de los enrutadores o servidores proxy a través de los cuales pasa la solicitud) podría hacer un hombre en el ataque al medio. O alguien podría explotar algunos ataques de DNS.
Si controla el código del cliente, puede restringir las CA fiables a las suyas. Entonces, la verificación de dominio es menos importante: cualquiera de sus servidores puede pretender ser otro.
Si no controla el código del cliente, un certificado firmado por una CA confiable puede ser sustituido por el suyo.
- Verificar el certificado en sí mismo y que se puede encadenar a un certificado de CA en el que ya confía le permite verificar que el certificado sea auténtico y válido.
- Verificar el nombre de host en el certificado le permite verificar que está hablando con el servidor con el que deseaba hablar, siempre que haya verificado que el certificado sea válido.
- (Verificando que la ubicación remota es de hecho la que tiene la clave privada para ese certificado, se realiza dentro del protocolo de enlace SSL / TLS).
Si desea una analogía con la verificación de pasaporte / ID para las personas:
- Verificar el certificado es como verificar que un pasaporte o una forma de identificación sea genuino. Puede decidir qué formas de ID quiere aceptar de una persona (por ejemplo, pasaporte, permiso de conducir, tarjeta de personal, ...) y qué países emisores de su confianza pueden verificar su autenticidad.
- Comprobar que la persona a distancia sea la que tiene la clave privada es similar a verificar que la imagen en el pasaporte / ID coincida con la cara de la persona que tiene delante.
- Verificar el nombre de host es como verificar que el pasaporte pertenezca a la persona cuyo nombre es el que está buscando.
Si no verifica el nombre de host, cualquier persona con un pasaporte válido que considere genuino podría acudir a usted y alegar que es el que está buscando (por nombre).
En circunstancias muy limitadas, en las que solo confía en una CA específica o un certificado autofirmado donde permite que cualquier certificado potencial se haga pasar por otro en el conjunto completo de certificados en los que confía, puede ser aceptable ignorar esta verificación, pero esto es muy raro, y no es una buena práctica.
Verificar que el nombre en el pasaporte coincida con el nombre de la persona que está buscando se considerará de sentido común; hazlo también por certificados. Si no lo hace, cualquier persona que tenga un certificado en el que confíe como genuino se haga pasar por otro certificado en el que pueda confiar y, por lo tanto, posiblemente realice ataques MITM.
Las reglas de verificación del nombre de host HTTPS están definidas en RFC 2818 Sección 3.1 (también más recientemente en una especificación de "mejores prácticas", RFC 6125 , no mucho implementada todavía).
En resumen, el nombre de host debe estar en una entrada DNS de nombre alternativo del sujeto (aunque puede recurrir al CN del DN del sujeto donde no hay SAN en el certificado). Cuando usa una dirección IP, la dirección IP debe estar en una entrada de dirección IP de SAN (aunque algunos navegadores le permitirán salirse con la dirección IP en el CN del DN del asunto).
Alguien más no puede simplemente copiar su certificado y usarlo porque no tienen su clave privada.
Si no verifica que el CN del certificado no concuerda con el nombre de dominio, entonces pueden simplemente crear su propio certificado (y que lo firme un CA de confianza para que parezca válido), usarlo en lugar del suyo y realizar un hombre en el ataque medio.
Además, debe verificar que el certificado proviene de una CA confiable. El trabajo de la CA consiste en asegurarse de que solo pueda obtener un certificado con el CN = si realmente controla ese dominio.
Si omites cualquiera de estos controles, entonces estás en riesgo de un ataque MITM.
Consulte también esta respuesta para un enfoque diferente que funcionará si tiene suficiente control sobre el cliente.