Certificato verificato utilizzando due percorsi diversi

4

StartSSL ha un certificato intermedio che usano per firmare i loro certificati EV: sub.class4.server .ca.pem . L'emittente di questo certificato è indicata da openssl x509 per essere / C = IL / O = StartCom Ltd./OU=Secure Firma digitale del certificato / CN = Autorità di certificazione StartCom . Ciò corrisponde al certificato che distribuiscono come CA principale: ca.pem .

Tuttavia, Firefox / Mozilla include due certificati con quell'oggetto. Uno è uguale al certificato distribuito da StartSSL. L'altro (allegato sotto) è verificabilmente diverso; per esempio, il numero di serie del primo è 1, mentre il numero seriale di quest'ultimo è 45. Modifica: Dopo ulteriori ricerche, si scopre che questo è lo stesso del certificato che StartSSL distribuisce come ca-sha2.pem .

Se utilizzo openssl verify per controllare sub.class4.server.ca.pem contro ca.pem , funziona:

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

È interessante notare che, se lo controllo con il certificato di Firefox / Mozilla, funziona ancora:

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

Per assicurarmi che qualcos'altro non entrasse lì per oscurare i miei risultati, l'ho provato contro un certificato che sapevo essere sbagliato:

% 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

Questo lascia due possibilità: o openssl verify non sta controllando la firma effettiva e fa affidamento esclusivamente sull'oggetto dell'emittente (probabilmente perché lo sto usando in modo errato), o in qualche modo questo certificato può essere verificato con due certificati diversi.

Per verificare la prima possibilità, ho creato un certificato autofirmato con le stesse informazioni sull'emittente e l'ho usato per verificare il certificato 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

Quindi sembra che openssl verify non sia facilmente interpretabile.

Poi mi è venuto in mente che due certificati diversi potevano verificare lo stesso certificato figlio se usavano la stessa chiave RSA, e ho scoperto che il modulo della chiave pubblica riportato per i due certificati è lo stesso.

Riguarda che StartCom abbia apparentemente usato la stessa chiave RSA per due certificati diversi? Mi sembra una cattiva idea, ma sono solo un dilettante.

Per comodità per chiunque stia esaminando questo, ecco il certificato aggiuntivo che Firefox ha:

-----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-----
    
posta wfaulk 27.03.2014 - 17:58
fonte

1 risposta

6

Per quanto riguarda X.509, non ci sono assolutamente problemi nell'avere più certificati con la stessa chiave pubblica. Il processo di validazione è descritto in tutti i dettagli qui ; in poche parole, si verifica che:

  • ogni certificato della catena è attualmente valido (per quanto riguarda le date di inizio e di fine validità);
  • la firma su ciascun certificato è corretta per il contenuto del certificato e la chiave pubblica nella CA di emissione;
  • il DN dell'emittente di ciascun certificato corrisponde al DN soggetto della sua CA emittente;
  • tutte le estensioni di certificato (norme sui certificati, vincoli di nome ...) sono corrette.

Avere la stessa chiave pubblica in due certificati distinti non è un problema. Ogni certificato asserisce un legame tra una chiave pubblica e un'identità . Se hai dieci certificati che asseriscono lo stesso legame, tanto meglio.

In pratica, avere diversi certificati con lo stesso nome e chiave è il normale risultato dei rinnovi. Alla scadenza di un certificato, potresti voler conservare la stessa coppia di chiavi per il nuovo certificato.

Nel tuo caso, la situazione è leggermente diversa perché i certificati coinvolti sono certificati radice, cioè non certificati "reali": non sono emessi da una CA; sono navi convenienti per ancore fidate . Tuttavia, un confronto di entrambi i certificati (con openssl x509 -text -noout -in ca.pem ) rivela il motivo per cui ce ne sono due (ed è un motivo molto povero): questo fa parte di un anatema sovrastante previsto su SHA-1. Infatti, un certificato di root è spesso autofirmato (poiché esiste un campo non facoltativo per una firma nel formato X.509) e un algoritmo di firma inizia con una funzione di hash. Il certificato "vecchio" (il file ca.pem di StartSSL) dichiara una firma con SHA-1, mentre il "nuovo" certificato (dalle interiora di Firefox) utilizza una firma basata su SHA-256.

Un'altra differenza è che il "nuovo" certificato non include URL per il download di CRL, che è corretto poiché un certificato di root, per definizione, non può essere revocato dalla sua CA di emissione.

Oltre al numero di serie, all'algoritmo di hash e all'URL per il download di CRL, i due certificati sono identici; contengono lo stesso nome, la chiave pubblica e le date di validità. Penso che il rifiuto cieco, sistematico, eccessivamente zelante di SHA-1 sia l'unità principale qui. Questa è una cattiva ragione perché:

  • SHA-1 non è ancora rotto, in particolare per le firme, che lavorano più sulle pre-immagini che sulle collisioni.
  • La firma su un certificato radice è inutile, quindi non importa se la funzione hash dichiarata è SHA-1, SHA-256, MD5 o FOOBAR42.
risposta data 27.03.2014 - 21:09
fonte