¿Cómo puedo explicar los certificados autofirmados a los usuarios?

6

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.

    
pregunta Superbest 21.04.2015 - 10:37
fuente

4 respuestas

5
  

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?

Si no está utilizando anclajes de confianza predefinidos (por ejemplo, la CA raíz del navegador), tiene que encontrar una forma de proporcionar a sus usuarios la información de confianza necesaria de forma segura . La forma preferida sería, por supuesto, personal, ya que cualquier forma indirecta como llamadas telefónicas o correos firmados por PGP necesita una confianza preestablecida, por ejemplo. asociar números de teléfono o teclas con usted.

  

También vale la pena mencionar que los certificados no son para siempre, y eventualmente vencen, por lo que el usuario debe poder decir la diferencia entre un cambio sospechoso de certificado ...

En este caso, debe informar nuevamente al usuario sobre el cambio de manera segura.

La idea general de la CA de confianza en el navegador es comenzar con cierta confianza predefinida y luego diferir la información de confianza sobre otros sitios. Esto es similar a la vida real: inicialmente confías en algunas personas (padres ..) y de ellos aprenderás a confiar en otras personas. Pero una vez que abandona cualquier configuración de confianza inicial, debe comenzar desde cero y, por lo tanto, buscar su propia manera de hacer que sus usuarios confíen en usted.

Si desea establecer su propio certificado como de confianza, solo puede comenzar con las relaciones de confianza existentes, es decir, amigos que lo conocen directamente, conocen su número de teléfono, su clave PGP, etc. Estas relaciones de confianza deben utilizarse para transportar el nueva confianza en su certificado (es decir, huella digital o similar). El mejor enfoque dependerá del tipo de relación de confianza que ya tenga con sus amigos y cuál se puede utilizar como el mejor medio de transporte para la nueva confianza.

    
respondido por el Steffen Ullrich 21.04.2015 - 11:01
fuente
3

Editar : el autor de la pregunta hizo ediciones significativas a su pregunta después de que se publicó esta respuesta. Esta respuesta se basa en una versión anterior de la pregunta que dio la impresión de que estaban preguntando sobre un sitio web público habitual.

No puede explicar que un certificado autofirmado está bien, porque en un sitio web público no lo está. La otra pregunta que mencionó se trataba de un contexto diferente: usar su propia CA para firmar sus certificados y tener un número limitado y conocido de clientes que confían en esa CA personalizada. Desde la perspectiva del navegador, esto no es técnicamente diferente al uso de una CA "oficial" y requiere que los clientes obtengan el certificado raíz de la CA a través de un canal confiable. Pero con usuarios anónimos de internet, esto no es posible.

No importa cuánto desconfíe del sistema de CA (y tiene buenas razones para hacerlo, pero ese es un tema diferente), el uso de un certificado autofirmado en un sitio web público es aún peor. Cualquier atacante MITM podría decodificar la comunicación, reemplazar su certificado con el suyo y volver a cifrarlo para el usuario. Sin una tercera parte confiable para verificar la firma del certificado, no hay defensa contra esto. Por lo tanto, no hay forma de verificar que de hecho "todo está bien".

Proporcionar la huella digital de su certificado no tiene sentido, ya que no tiene forma de enviarla al usuario de una manera que no pueda ser manipulada por el atacante MITM. Un sitio web https puede manipularse como se describió anteriormente, y un sitio web http es aún más fácil de manipular. El atacante podría simplemente reemplazar la huella dactilar en el sitio web con la de ellos mismos.

Hay esperanza de que algún día un mejor sistema como DANE (que transfiere el rol de confianza al sistema DNS) Finalmente, reemplace el sistema de CA defectuoso, pero hasta entonces las autoridades de certificación siguen siendo la mejor solución que tenemos.

    
respondido por el Philipp 21.04.2015 - 17:05
fuente
1

Cuando tiene un contacto seguro (!) con todos sus usuarios a través de un medio diferente, puede enviarles el certificado raíz de su propia autoridad de certificación que utilizó para firmar el certificado de su sitio web y darles instrucciones sobre cómo agregar a la lista de certificados de confianza de su navegador web (o incluso a un script de instalación práctico que lo hace automáticamente).

Cuando lo hicieron correctamente, el sitio web ya no aparecerá como autofirmado en su navegador. En su lugar, el navegador lo tratará como si estuviera firmado por cualquier otra autoridad de certificados "real".

Esto, por supuesto, no protege a sus usuarios de una CA deshonesta que crea un certificado falso para su sitio web, ya que los navegadores web comunes no suelen admitir la fijación de CA (indicándoles que solo confíen en una CA específica para un sitio web específico) .

También debe informar a sus usuarios de que esto significa que ahora también puede hacerse pasar por otros sitios web que visitan, por lo que requiere mucha confianza. Este problema tampoco es solucionable, porque actualmente no existe un concepto como una CA que solo sea confiable para dominios específicos.

Afortunadamente, este problema podría resolverse algún día con DANE que coloca a los servidores DNS en el rol de las autoridades de certificación . Luego podrá distribuir el certificado TLS de su dominio por el servidor DNS que es responsable de su dominio (y solo ese). Pero actualmente no hay navegadores que lo admitan de manera inmediata, y teniendo en cuenta que hay varias compañías que tienen intereses financieros para mantener el sistema de CA (que es prácticamente una licencia de impresión de dinero vendida por los desarrolladores de navegadores), podría tomar una decisión. mientras que hasta que despegue.

    
respondido por el Philipp 21.04.2015 - 17:39
fuente
-3

El mejor enfoque (para el caso de uso de un grupo de usuarios limitado y un sitio web personal) que utilizo es tener una página no segura en algún lugar donde mis usuarios puedan descargar el certificado raíz (mi propia CA) y encontrar instrucciones sobre cómo instalar que en la tienda de confianza. De esta manera, la computadora puede confiar en mi certificado "autofirmado".

uno de los problemas con este enfoque es que para Windows o Mac, por lo general, basta con ponerlo en la aplicación de almacenamiento de claves del sistema. En Linux / UNIX, la mayoría de las aplicaciones tienen su propio almacén de certificados. Y a veces los navegadores tienen su propia tienda. Normalmente resuelvo esto ofreciendo a mis usuarios (remoto) ayuda para instalar los certificados y colocarlos en los lugares correctos.

pero con un grupo de usuarios de menos de 100 personas, esto es factible.

en cuanto a su comentario "más seguro". Es imposible decir que es más seguro. Esos otros CA tienen auditorías regulares. Dudo que tengas el tiempo / dinero para ser auditado como un CA. así que simplemente no sabemos si es más seguro.

    
respondido por el LvB 21.04.2015 - 10:44
fuente

Lea otras preguntas en las etiquetas