¿Cómo puedo determinar si un certificado en un registro de CT es mío?

8

Estoy experimentando con el escaneo de registros de transparencia de certificados para mis dominios, y me gustaría filtrar las entradas de registro para los certificados emitidos legítimamente, de modo que solo recibo alertas cuando alguien else obtenga un certificado para mi dominio.

Traté de averiguar si una entrada de registro de CT era mía comparando su huella digital con la huella digital del certificado en mi servidor. Sin embargo, encontré que algunas de las entradas en el registro son "pre-certificados", que tienen una extensión crítica adicional para que no sean válidas en los navegadores. Aparentemente, estos se consideran equivalentes al certificado final emitido por motivos de transparencia (por lo que parece una mala idea ignorar todos los certificados previos), pero su huella digital no coincide con la clave que tengo.

¿Cómo puedo determinar que dicho certificado previo es equivalente a un certificado emitido?

    
pregunta Wolfgang 22.04.2018 - 03:16
fuente

2 respuestas

1

Verifique la clave pública, si coinciden, está bien. Al final del día, la clave es la parte importante del certificado, como si fuera su clave y, por lo tanto, el atacante no tiene la clave privada correspondiente, el resto no es importante.

No verifique la identificación del certificado como se sugiere, la identificación puede ser manipulada.

    
respondido por el Peter Harmann 22.04.2018 - 14:41
fuente
1

Sí, la forma más sencilla es simplemente comparar la clave pública en el certificado previo y el certificado, como se indicó anteriormente. Pero la forma podría ser incorrecta si CA emitió un certificado con datos de pre-certificado incorrectos. Dejame explicar. Supongamos que tiene una parte TBS (ToBeSigned) del posible certificado futuro. Luego CA hace un pre-certificado de la TBS (agregue "extensión envenenada" y firme el pre-certificado con una especie de clave falsa) y lo envíe al registro de CT. Luego CA recibe SignedCertificateTimestamp (SCT) para el certificado e incluye SCT en el TBS inicial como una extensión. Luego CA emite un certificado real: firme el TBS con la clave de CA real. Pero podría haber un problema: ¡algunas CA pueden emitir incorrectamente el certificado del usuario final al hacer que el TBS final no sea el mismo que en el certificado previo! Aquí hay un ejemplo real de

Todos los certificados previos generalmente emitidos para tener valor para SignedCertificateTimestampList (1.3.6.1.4.1.11129.2.4.2) X.509 extensión de certificado. Pero, de hecho, en la extensión del certificado, solo encontrará la parte TBS (ToBeSigned) del pre-certificado, no un pre-certificado completo. Y para demostrar que este pre-certificado en particular es para este certificado en particular, deberá verificar el valor de la extensión SignedCertificateTimestampList con el tipo de PreCert deducido del certificado. Suena complicado, pero así es como funciona todo. Para ayudar a las personas a resolver problemas con la verificación de datos interna de CT, hice CTjs lib. Aquí puede encontrar un ejemplo cómo verificar correctamente los datos de pre-certificado contra el certificado del usuario final.

No dude en hacer más preguntas sobre los datos de TC.

    
respondido por el Yury Strozhevsky 20.06.2018 - 13:44
fuente

Lea otras preguntas en las etiquetas