Cifrar el tráfico HTTP local usando un certificado autofirmado

12

Durante las últimas dos horas he intentado crear un certificado autofirmado que me gustaría usar para cifrar el tráfico HTTP entre las computadoras y un servidor en mi red doméstica (porque soy un paranoico así) . Sin embargo, no estoy seguro de si lo estoy haciendo bien porque sigo recibiendo advertencias de seguridad en mis navegadores web. Especialmente a Google Chrome no le gusta lo que estoy haciendo.

Esperemos que alguien con más experiencia pueda brindar orientación.

Se puede acceder a mi servidor (un Synology DiskStation) tanto internamente (a través de su dirección IP local o nombre de host), como a través de Internet (a través de una dirección IP pública o nombre DNS). Desafortunadamente, la dirección IP pública es dinámica. Sin embargo, un servicio que se ejecuta en mi servidor actualiza la entrada de DNS cada 60 minutos.

Lo que he hecho es que he usado OpenSSL para generar un certificado X.509 autofirmado (usando la configuración predeterminada para la parte más grande). No especifiqué un CN (nombre común), porque durante las pruebas anteriores descubrí que causaría aún más advertencias de seguridad al acceder al servidor internamente. En su lugar, incluí el nombre DNS, el nombre de host y la dirección IP local en el campo de extensión subjectAltName .

El certificado de mi servidor ahora se ve así: enlace

Luego procedí a instalar este certificado en el almacén de certificados de Trusted Root Authorities Authorities en mi máquina con Windows. Ahora puedo acceder al servidor web utilizando HTTPS, pero no sin previo aviso.

Los errores incluyen:

  • (Google Chrome) Server's certificate does not match the URL. (cuando se usa el nombre de host)
  • (Google Chrome) The identity of this website has not been verified. (cuando se usa IP local)
  • (Internet Explorer) The security certificate presented by this website was issued for a different website's address. (cuando se usa IP local)

Estas advertencias regresan cada vez que reinicio el navegador. Si accedo al servidor web desde Internet (usando el nombre DNS), ninguno de mis navegadores se queja y todo está bien.

¿Puedo generar certificados para uso interno que no activen tales errores? Apreciaría mucho tu ayuda.

    
pregunta Steven Liekens 12.01.2013 - 02:04
fuente

1 respuesta

6

Al realizar el acceso SSL a un servidor, el cliente realiza las siguientes verificaciones:

  1. El cliente valida el certificado con respecto a los "anclajes de confianza" locales, también conocidos como "CA raíz", que están integrados en el cliente (el navegador o el sistema operativo) . La validación consiste en construir una cadena de certificados desde un ancla de confianza hasta el certificado del servidor SSL, y cada certificado firmará el siguiente. El algoritmo es un poco complejo en sus detalles (sección 6 de RFC 5280 ).

  2. El cliente verifica que el nombre del servidor deseado aparece en el certificado del servidor (la validación le dice que es un certificado válido para algún servidor; este paso es para verificar que sea el servidor correcto, no cualquier otro). Este paso se describe en RFC 2818 .

Para el primer paso, debe decirle a su sistema cliente que debe aceptar el certificado autofirmado como válido. Como hablas de Internet Explorer, infiero un sistema operativo Windows; consulte esta respuesta para saber cómo hacerlo (dado que Chrome también utiliza los almacenes de confianza del sistema operativo, es probable que lo solucione). Chrome también).

Para el segundo paso, debe usar una URL con nombre de servidor (no con dirección IP) que coincida con el nombre de tipo dNSName que aparece en la extensión Subject Alt Name del certificado ( cuando no hay dNSName en esa extensión, o cuando la extensión falta por completo, se usa el Common Name en el campo subjectDN ). Si la URL se ve así:

https://www.example.com/path/to/whatever.html

entonces el navegador intentará encontrar www.example.com en el certificado. Si no lo encuentra, entonces debes recibir una advertencia de miedo, según tu experiencia.

Es posible que tengas que jugar un poco con la configuración de tu DNS para que puedas usar el mismo nombre independientemente del lugar de red en el que te encuentres. Recuerde que es una coincidencia de nombre : no funciona con direcciones IP. Además, tenga en cuenta que puede poner varios nombres del tipo dNSName en una extensión Subject Alt Name , lo cual es útil para los servidores SSL que deben contactarse con varios nombres.

    
respondido por el Thomas Pornin 12.01.2013 - 15:12
fuente

Lea otras preguntas en las etiquetas