No confío en las autoridades de certificación, así que estoy usando un certificado autofirmado en mi servidor. El servidor proporciona tanto un sitio web como otros servicios.
La mayoría del software moderno con capacidad SSL, al encontrar SSL, verifica si el certificado es otorgado por una CA y, si no, arroja una advertencia muy aterradora . Contrario a La lógica de Mozilla , creo que en mi caso "> un certificado autofirmado es en realidad más seguro , porque evita el riesgo de CA maliciosas o incompetentes .
Pero digamos que quiero darle a un amigo acceso a mi sitio web o mi servidor. Tal vez tenga algunas fotos de mi viaje que quiero mostrarles: si les doy el URI seguro, su computadora también mostrará las advertencias habituales. Pero como a diferencia de mí, no fueron ellos quienes configuraron todo, ¿cómo ellos sabrán que Everything Is Fine ™ (a menos que la huella digital no coincida)?
Podría recibir un pequeño aviso en la versión HTTP de mi página que explica el error, y cómo verificar manualmente la huella digital y asegurarme de que Todo está bien . Pero:
- Si se comprometió la conexión, el atacante podría modificar este aviso para decir "los certificados autofirmados de bro nah están totalmente bien, confía en mí".
- Si el usuario va directamente a la URI de HTTPS, ¿cómo sabrán que comprueban la versión HTTP?
- Si el usuario utiliza un servicio no web al que se accede a través de su propio programa, ¿cómo sabrán el aviso?
- Si el usuario no sabe cómo funciona SSL, solo creerán en su navegador y cerrarán el sitio, en lugar de investigar por qué hay un certificado autofirmado (ya que, desafortunadamente, la documentación / La actitud de los autores de UI parece haber sido "no hay ninguna buena razón para ello").
Entonces, ¿cómo puedo asegurarme de que cuando envío un usuario a mi servidor y se enfrentan a la advertencia del "certificado autofirmado", pueden decidir por sí mismos si confiar o no, en lugar de tener que hacerlo? ¿Cree la imagen sesgada que su software les pinta?
No quiero decirles a los usuarios que "simplemente ignoren la advertencia, está bien", porque esto no solo refuerza un mal hábito en general (¿qué sucede si su banco verificado por CA se compromete un día y presenta una autoevaluación? ¿certificado firmado?) pero tampoco habría manera de que ellos supieran si mi servidor está comprometido.
También vale la pena mencionar que los certificados no son para siempre, y eventualmente caducan, por lo que el usuario debe ser capaz de distinguir la diferencia entre un cambio sospechoso de certificado (por ejemplo, mucho antes del vencimiento planificado del actual), un cambio sospechoso de certificado que se hace que parezca no sospechoso (un MITM ejecutado justo cuando estaba programado para renovar mi certificado), un cambio legítimo de certificado (cuando mi certificado expira y yo emito uno nuevo), y un cambio legítimo que parece sospechoso (yo decidí emitir un nuevo certificado con mucha anticipación por cualquier motivo).
Podemos asumir que:
- Tengo pocos usuarios, por lo que la escalabilidad no es tan importante. Por ejemplo, los usuarios que me envían un correo electrónico o llaman a mi número de teléfono para verificar que el certificado son soluciones perfectamente válidas.
- Los usuarios confían en mí y pueden comunicarse conmigo a través de un canal seguro. Por ejemplo, pueden hablar conmigo en persona o enviarme un correo electrónico cifrado.
- Los usuarios son razonablemente inteligentes y se puede esperar que comprendan conceptos básicos de seguridad como "si el certificado cambia inesperadamente, el sitio puede haber sido comprometido".
Mi principal preocupación es tratar con usuarios menos técnicos, quienes se confundirán cuando vean la advertencia del certificado autofirmado.