Certificado verificado usando dos rutas diferentes

4

StartSSL tiene un certificado intermedio que utilizan para firmar sus certificados EV: sub.class4.server .ca.pem . openssl x509 muestra al emisor de este certificado como / C = IL / O = StartCom Ltd./OU=Secure Digital Certificate Signing / CN = StartCom Certification Authority . Esto coincide con el certificado que distribuyen como su CA raíz: ca.pem .

Sin embargo, Firefox / Mozilla incluye dos certificados con ese tema. Uno es el mismo que el certificado que distribuye StartSSL. El otro (adjunto a continuación) es verificable diferente; por ejemplo, el número de serie del primero es 1, mientras que el número de serie del último es 45. Editar: Después de más investigaciones, resulta que este es el mismo que el certificado que StartSSL se distribuye como ca-sha2.pem .

Si uso openssl verify para verificar sub.class4.server.ca.pem contra ca.pem , funciona:

% openssl verify -CAfile ca.pem -verbose sub.class4.server.ca.pem
sub.class4.server.ca.pem: OK

Sin embargo, resulta interesante que si lo comparo con el certificado de Firefox / Mozilla, todavía funciona:

% openssl verify -CAfile ca-ff.pem -verbose sub.class4.server.ca.pem
sub.class4.server.ca.pem: OK

Solo para asegurarme de que algo más no estaba entrando allí y ensuciar mis resultados, lo probé contra un certificado que sabía que era el incorrecto:

% openssl verify -CAfile ca-wrong.pem -verbose sub.class4.server.ca.pem
sub.class4.server.ca.pem: C = IL, O = StartCom Ltd., OU = StartCom Certification Authority, CN = StartCom Extended Validation Server CA
error 20 at 0 depth lookup:unable to get local issuer certificate

Eso deja dos posibilidades: o bien openssl verify no está verificando la firma real y confiando únicamente en el Asunto del Emisor (posiblemente porque lo estoy usando incorrectamente), o de alguna manera este certificado puede verificarse con dos certificados diferentes.

Para verificar la primera posibilidad, creé un certificado autofirmado con la misma información del emisor y lo usé para verificar el certificado intermedio:

% openssl verify -CAfile ca-fake.pem -verbose sub.class4.server.ca.pem
sub.class4.server.ca.pem: C = IL, O = StartCom Ltd., OU = StartCom Certification Authority, CN = StartCom Extended Validation Server CA
error 20 at 0 depth lookup:unable to get local issuer certificate

Así que parece que openssl verify no es tan fácil de engañar.

Entonces se me ocurrió que dos certificados diferentes podrían verificar el mismo certificado secundario si usaban la misma clave RSA, y encontré que el módulo de clave pública reportado para los dos certificados es el mismo.

¿Es preocupante en absoluto que StartCom haya usado aparentemente la misma clave RSA para dos certificados diferentes? Me parece una mala idea, pero solo soy un aficionado.

Para conveniencia de cualquier persona que busque esto, aquí está el certificado adicional que tiene Firefox:

-----BEGIN CERTIFICATE-----
MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW
MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9
MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD
VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul
F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC
ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w
ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk
aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0
YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg
c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0
aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93
d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG
CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1
dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF
wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS
Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst
0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc
pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl
CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF
P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK
1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm
KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE
JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ
8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm
fyWl8kgAwKQB2j8=
-----END CERTIFICATE-----
    
pregunta wfaulk 27.03.2014 - 17:58
fuente

1 respuesta

6

En lo que respecta a X.509, no hay ningún problema en tener varios certificados con la misma clave pública. El proceso de validación se describe con todos los detalles aquí ; en pocas palabras, se verifica que:

  • cada certificado de la cadena es válido actualmente (en lo que respecta a las fechas de inicio y finalización de la validez);
  • la firma en cada certificado es correcta para el contenido del certificado y la clave pública en la CA emisora;
  • el DN del emisor de cada certificado coincide con el DN del sujeto de su CA emisora;
  • todas las extensiones de certificado (políticas de certificado, restricciones de nombre ...) son correctas.

Tener la misma clave pública en dos certificados distintos no es un problema. Cada certificado establece un enlace entre una clave pública y una identidad . Si tiene diez certificados que afirman el mismo enlace, tanto mejor.

En la práctica, tener varios certificados con el mismo nombre y clave es el resultado normal de las renovaciones. Cuando caduque un certificado, es posible que desee mantener el mismo par de claves para el nuevo certificado.

En su caso, la situación es ligeramente diferente porque los certificados involucrados son certificados raíz, es decir, no son certificados "reales": no son emitidos por una CA; son recipientes convenientes para anclajes de confianza . Sin embargo, una comparación de ambos certificados (con openssl x509 -text -noout -in ca.pem ) revela la razón por la cual hay dos (y es una muy mala razón): esto es parte de un anatema general predicho en SHA-1. De hecho, un certificado raíz es a menudo autofirmado (porque hay un campo no opcional para una firma en el formato X.509), y un algoritmo de firma comienza por una función hash. El certificado "antiguo" (el archivo ca.pem de StartSSL) declara una firma con SHA-1, mientras que el certificado "nuevo" (de las entrañas de Firefox) usa una firma basada en SHA-256.

Otra diferencia es que el certificado "nuevo" no incluye la URL para la descarga de CRL, lo cual es correcto ya que un certificado raíz, por definición, no puede ser revocado por su CA emisora.

Además de los números de serie, el algoritmo hash y la URL para la descarga de CRL, los dos certificados son idénticos; Contienen el mismo nombre, clave pública y fechas de validez. Creo que el principal impulso aquí es el rechazo ciego, sistemático y exagerado de SHA-1. Esta es una mala razón porque:

  • SHA-1 no está roto aún, en particular para firmas, que funcionan más en las imágenes previas que en las colisiones.
  • La firma en un certificado raíz no tiene sentido, por lo que no importa si la función hash declarada es SHA-1, SHA-256, MD5 o FOOBAR42.
respondido por el Thomas Pornin 27.03.2014 - 21:09
fuente

Lea otras preguntas en las etiquetas