Diferencia entre la fijación del certificado y la fijación de la clave pública

13

Entiendo lo que es la fijación. Había leído sobre la fijación de certificados y aprecié su caso de uso. Pero hoy aprendí que el anclaje puede ser de dos tipos:

  1. coloque el certificado o
  2. fija la clave pública

Identificación de certificados y claves públicas

Me gustaría entender los casos de uso para cada uno. ¿Algún escenario típico en el que preferiríamos uno sobre el otro?

Una duda que tengo es: digamos que fijamos una clave pública. Es nuestra conexión vulnerable a los ataques MitM. ¿Puede haber un certificado raíz certificado por CA que tenga la misma clave pública que el certificado que se usa en el cliente?

Se aprecia cualquier diferencia entre los dos que me ayude a entenderlos mejor.

    
pregunta Aniket Thakur 03.04.2015 - 18:29
fuente

3 respuestas

11

Realmente depende de cómo su aplicación / sitio administra los certificados y las claves públicas, es decir, con qué frecuencia se rotan las claves y los certificados. Por ejemplo, si su sitio rota los certificados con mucha frecuencia, también deberá actualizar su aplicación a menudo, si está colocando el certificado. Considerando que, en este caso de uso, la clave pública de anclaje será una mejor idea ya que la clave pública asociada con el certificado permanecerá estática.

Desde el enlace OWASP que mencionó en la pregunta:

  

Certificado

     

El certificado es el más fácil de fijar. Puede obtener el certificado   de banda para el sitio web, haga que la gente de TI envíe un correo electrónico a su empresa   certificado para usted, use openssl s_client para recuperar el certificado   Cuando el certificado caduque, actualizará su aplicación.   Suponiendo que su aplicación no tenga errores o defectos de seguridad, el   La aplicación se actualizaría cada año o dos. En el tiempo de ejecución, usted   recuperar el sitio web o el certificado del servidor en la devolución de llamada. Dentro   la devolución de llamada, usted compara el certificado recuperado con el   Certificado incrustado dentro del programa. Si la comparación falla, entonces   falla el método o función.

     

Hay un inconveniente en fijar un certificado. Si el sitio rota su   certificado de forma regular, entonces su solicitud debería ser   actualizado regularmente Por ejemplo, Google rota sus certificados, por lo que   necesitará actualizar su aplicación aproximadamente una vez al mes (si es   Depende de los servicios de Google). A pesar de que Google gira su   certificados, las claves públicas subyacentes (dentro del certificado)   permanecer estático.

     

Clave pública

     

La fijación de claves públicas es más flexible pero un poco más complicada debido a la   Pasos adicionales necesarios para extraer la clave pública de un certificado. Como   con un certificado, el programa verifica la clave pública extraída con   Su copia incrustada de la clave pública. Hay dos desventajas dos   fijación de clave pública. Primero, es más difícil trabajar con teclas (en comparación con   certificados) ya que normalmente debe extraer la clave de la   certificado. La extracción es un inconveniente menor en Java y .Net,   pero es incómodo en Cocoa / CocoaTouch y OpenSSL. Segundo, el   La clave es estática y puede violar las políticas de rotación clave.

Con respecto a MitM, no, su conexión TLS no será vulnerable a ningún ataque MitM siempre y cuando haya implementado la identificación del certificado correctamente. Incluso si un atacante puede obtener un certificado válido para su propio dominio con la misma clave pública que su aplicación ha anclado (a través de un CA de colorete, digamos), todavía no tendrán el correspondiente clave privada . Por lo tanto, no podrá crear una conexión TLS válida con su aplicación (ya que no podrán realizar el protocolo de enlace TLS).

    
respondido por el Rahil Arora 29.04.2015 - 04:18
fuente
0

Sólo algunos de mis dos centavos:

Podría imaginar que la fijación de clave pública se use en escenarios en los que puede ser difícil actualizar la aplicación en caso de que se renueve el certificado (por ejemplo, en sistemas integrados o aplicaciones IoT). De lo contrario, la fijación de certificados sería más conveniente.

Si las claves públicas se generan con suficiente entropía, no es probable que haya dos claves que sean iguales.

    
respondido por el clouddra 03.04.2015 - 20:25
fuente
0

El gran problema con la fijación de certificados es que los certificados tienen una vida útil limitada y, a menudo, cuestan dinero. Certificados gratuitos de permite cifrar solo los últimos 90 días. Si paga dinero, puede obtener algo más de dos años, que es el límite establecido por el foro de CA / Browser en la actualidad. No hay garantía de que esto no se reduzca más en el futuro.

No puede fijar un certificado hasta que lo haya comprado y una vez que lo haya comprado, su vida útil está marcando si lo utiliza o no. Por lo tanto, si coloca certificados, es probable que termine comprando muchos certificados adicionales y probablemente tenga problemas con las personas que intentan conectarse utilizando versiones antiguas de su código.

Por otro lado, las claves públicas no tienen ningún tipo de restricción de por vida. Por lo tanto, si utiliza la fijación de claves puede generar un par de claves, coloque la clave privada en su bóveda y la clave pública en su aplicación. Luego, años más tarde, puede extraer la clave privada de su bóveda, obtener un certificado y ponerlo en servicio.

La desventaja potencial de la fijación de claves es que no hay revocación para las claves. Si sus claves están comprometidas, puede revocar los certificados, pero un atacante con una CA amigable podría potencialmente obtener un nuevo certificado con la clave robada. La revocación del certificado OTOH es bastante frágil en general.

    
respondido por el Peter Green 26.09.2018 - 18:48
fuente

Lea otras preguntas en las etiquetas