Anche se non lo hai detto, per lo più presumo openssl . Un sacco di software usa il formato PEM per certs (che è base64 come hai mostrato PIÙ i trattini -BEGIN e le linee -INDINE, quelli sono NECESSARI), e un po 'usa un file contenente più certificati PEM chiamati bundle, ma AFAIK apre solo e le app che la chiamano utilizzano un file di bundle PEM per le CA attendibili .
Per informazioni, la lunghezza delle linee base64 differisce a causa del rispetto di standard diversi. Le RFC PEM che per prima hanno definito base64 hanno detto 64. Le RFC MIME che sono ora più diffuse dicono 76.
Opzione 0: non preoccuparti. Un file openssl "CAfile" funziona perfettamente con lo stesso certificato (CA) che si verifica più di una volta. Ci vuole un po 'più di memoria, ma su sistemi desktop moderni (o superiori) probabilmente non puoi nemmeno misurare l'effetto di meno di qualche migliaio di certificati extra.
Opzione 1: canonicalize. Filtra ogni certificato attraverso openssl x509
con tutti i valori predefiniti (che è copia, informa PEM, outform PEM) cioè openssl x509 <oldfile >newfile
. Il risultato userà costantemente le interruzioni di 64 caratteri. Come bonus, puoi specificare -subject
per aggiungere un nome (abbastanza) leggibile all'inizio del file - che openssl o le app che lo utilizzano ignoreranno, ma altre app potrebbero non farlo.
Ma sia per 0 che per 1, se disponi di certs diversi per la stessa CA , ad esempio uno scaduto e un rinnovo, o uno rotto e una correzione, che non sono duplicati di la tua definizione, che NON funzionerà in modo affidabile; openssl fino alla data (1.0.1) usa solo il primo certificato trovato per un CA nome e AKI se disponibile, che se non stai attento è quello sbagliato. (1.0.2 è annunciato per avere cambiamenti nella convalida della catena CERT, e non ho ancora guardato i dettagli, quindi questo potrebbe cambiare.)
Opzione 2: usa gli hash del nome. Usa anche il metodo openssl "CApath" o "CAdir", oppure: crea una directory in cui inserisci ogni certificato CA come un file e ogni volta aggiungi uno fa c_rehash
(su Unix, o Windows se installi perl, oppure un equivalente BAT-ified). Se il tuo nuovo certificato e quello esistente hanno lo stesso hash del nome soggetto, otterrai link (o nomi) con un suffisso diverso da ".0". Due certificati con lo stesso hash soggetto, ad es. abcdef01.0
e abcdef01.1
QUASI sicuramente (non proprio) hanno lo stesso Soggetto, cioè il nome di CA, ma può o non può essere lo stesso certificato; confronta quei file specifici.
Nota che avendo costruito un "CAdir" in questo formato, la linea di comando openssl e almeno molte app ti permettono di usarlo invece di "CAfile"; alcuni addirittura danno il consiglio per lo più antiquato che è "più efficiente" (nel 1995 ha fatto la differenza, oggi è probabilmente 0,1 msec invece di 0,2 msec).
Altri strumenti: se ho indovinato su openssl, puoi eseguire l'opzione canonicalize importando ed esportando nuovamente dal keystore di Windows, dal keystore di Firefox o da un keystore java. Mi aspetto che Mac, Apple e Android abbiano capacità simili ma non li conosciamo.
I primi due hanno GUI convenienti (ma noiose); per Windows credo ci sia ancora un modulo a riga di comando ma, tipico per MS, lo cambiano ogni volta che si blink, quindi ho smesso di cercare di tenere il passo. Questi hanno anche la proprietà, possibilmente cattiva o possibilmente buona, che se lasci questi certificati nel truststore e non li elimini, i rispettivi browser (IE e forse Chrome o Firefox) si fidano dei certificati del sito Web di tali CA.
Per java (assumendo JRE nel tuo PATH, altrimenti usa pathname)
keytool -keystore whatever [-alias x] -importcert -rfc -file certfile
keytool -keystore whatever [-alias x] -exportcert -rfc -file newfile
o ancora più semplice: se importi e lasci in un JKS tutti gli stessi certificati del tuo gruppo PEM, ciascuno con un -alias
unico da specificare, e cerchi di aggiungere un'altra copia di un certificato già nel JKS, ti avviserà. Tuttavia, non rileverà i certificati con la stessa CA.