Le informazioni sulla chiave pubblica del soggetto dovrebbero essere uguali in 2 diversi certificati creati dallo stesso CSR?

3

Recentemente, ho lavorato all'impostazione del blocco dei certificati per la nostra app per dispositivi mobili. Sto usando l'hash dell'oggetto Subject Public Key Information (SPKI) per il blocco. Ora, ho avuto l'impressione che SPKI sarebbe lo stesso se creerò un altro certificato dalla stessa chiave privata. Così l'ho provato - ho creato una chiave privata usando SSL e un CSR corrispondente. Ora, ho firmato questo CSR usando due chiavi private diverse e, con mia sorpresa, lo SPKI (e l'hash del pin) non era lo stesso. È questo il comportamento previsto? O è qualcosa che mi manca? Anche la PKI nel certificato è firmata?

Questi sono i comandi di openssl che ho usato:

Per generare un CSR:

openssl req -new -sha256 -key private.key -out private.csr

Per generare una chiave privata CA:

openssl genrsa -des3 -out ca.key 2048

Per firmare il CSR:

openssl x509 -req -days 365 -in private.csr -signkey ca.key -out test.crt

Questo è l'inizio dello SPKI dal primo certificato:

BA 86 D3 0E E8 CC F3 C0 A2 B9 1E 8B BA 45 80 11 EF 13 CB 4F 76 CE A8 6A

E questo è l'inizio dello SPKI dal secondo certificato:

CC 96 B3 AB EA 0D FC 66 91 D8 E2 50 2B A7 8F 63 91 4C 7E 10 A3 48 1E 9F

Per calcolare gli hash, ho usato il modo più semplice: ho importato i certificati nel portachiavi mac e li ho aperti:

Hoancheutilizzatoquesto script python da TrustKit per ottenere l'hash del pinning del certificato e anche era diverso.

    
posta Omer Levi Hevroni 21.12.2017 - 07:06
fonte

1 risposta

4

To sign the CSR:

 openssl x509 -req -days 365 -in private.csr -signkey ca.key -out test.crt

Da man x509 :

-signkey filename
... If the input is a certificate request then a self signed certificate is created using the supplied private key using the subject name in the request

In altre parole: stai creando un certificato autofirmato con ca.key come chiave e non un certificato con private.key come chiave. Dal momento che stai utilizzando una chiave diversa, ottieni quindi chiavi diverse all'interno del certificato generato e quindi informazioni sulla chiave pubblica dell'oggetto diverso.

Ciò che invece devi fare è creare una CA e usarla per firmare la CSR in questo modo:

$ openssl req -x509 -newkey rsa:4096 -keyout c0.pem -out c0.pem -days 365
$ openssl x509 -req -days 365 -in private.csr -CA c0.pem -CAcreateserial -out test0.crt

Se lo fai con CA diverse ma lo stesso CSR vedrai che tutti i certificati risultanti hanno lo stesso oggetto chiave pubblica, utilizzando la chiave inclusa nel CSR.

    
risposta data 21.12.2017 - 07:34
fonte

Leggi altre domande sui tag