Los navegadores y los sistemas operativos vienen con un conjunto de certificados SSL predeterminados para organizaciones bien conocidas, como los certificados raíz de las CA.
Comprendo que el modelo de confianza es el siguiente: selecciono (en realidad, los desarrolladores de mi software seleccionan para mí) algunas de las principales autoridades de certificación y decido que confío en ellas. Aunque casi nunca voy a los sitios de estas entidades emisoras de certificados, los sitios a los que utilizo certificados que dependen de las entidades emisoras de certificados, por lo que confío automáticamente en cualquier certificado derivado de un certificado raíz en el que confío.
Sin embargo, realmente confío en los sitios que visito más que las CA raíz . Por lo tanto, no quiero usar este modelo basado en árboles. En su lugar, me gustaría que fuera mi responsabilidad personal verificar y almacenar individualmente el certificado de cada sitio que visito. Entiendo que esto puede generar riesgos ya que mis propios recursos para detectar certificados comprometidos son limitados.
Parece que podría hacer esto hoy: puedo eliminar todos mis certificados raíz y comenzar a agregar excepciones a cada sitio que visito (asumiendo que decido confiar en ellos). Sin embargo, esto introduciría un período de ajuste muy frustrante en el que mi navegación se interrumpe con frecuencia al tener que agregar constantemente una excepción a los sitios que navego con frecuencia.
Además, me imagino que esta impracticabilidad se puede resolver fácilmente: muchos de los sitios que visito son casos no controvertidos, confiables y directos, como Google, StackExchange, sitios de noticias, etc. Si algunos extraños al azar en Internet acordaron que un certificado es el certificado SSL legítimo para www.cnn.com, podría creerlo y simplemente usar el certificado que dieron (¿cuáles son las probabilidades de que estas personas hayan comprometido el certificado de CNN?) y al mismo tiempo conspiró para fabricar un consenso aparente a favor del certificado falsificado?). Por lo tanto, podría haber un repositorio en línea de sitios comunes, no controvertidos, para que pueda descargar sus certificados de forma masiva cada año y así reducir enormemente el número de excepciones que necesito agregar. Obviamente, los casos delicados como mi banco no se incluirían en este repositorio; yo mismo examinaría ese certificado manualmente luego de una cuidadosa consideración.
Esto eliminaría mi necesidad de confiar en los certificados raíz y eliminaría el riesgo de CAs comprometidas o malintencionadas. A cambio, el nuevo riesgo es que haya una operación muy concertada para envenenar el repositorio con certificados falsificados de un sitio intrascendente que se ha comprometido justo cuando descargo mis certificados para el año (puedo compararlos con los que comparto). Ya tenemos y escrutamos cambios inesperados). El impacto en la facilidad de uso es insignificante: después de instalar mi navegador, solo necesito descargar un archivo zip lleno de certificados y volcarlos en mi caché de certificados. Ahora tendría que decidir personalmente si confiar en sitios oscuros o sensibles en lugar de confiarlos automáticamente a través del certificado raíz, pero tal vez eso no sea algo tan malo.
¿Es este tipo de modelo posible? ¿Ya existe tal repositorio? ¿Existen fallas importantes que no he considerado?
Tenga en cuenta que también estoy interesado en las implicaciones de los problemas de seguridad de larga data. Por ejemplo, creo que es interesante considerar la implicación de adoptar mi esquema propuesto anteriormente, dada la posibilidad de que mi CA raíz y mi banco ya hayan sido comprometidos y lo hayan sido durante varios años.