Come convertire il file .pfx in keystore con chiave privata?


107

Devo firmare l'applicazione Android ( .apk).
Ho .pfxfile. L'ho convertito in .cerfile tramite Internet Explorer e poi convertito .cerin .keystorekeytool. Poi ho provato a firmare .apkcon jarsigner ma dice che .keystore non contenta una chiave privata.

Cosa sto sbagliando?


Questo può essere utile: come posso trovare ed eseguire il keytool per Windows stackoverflow.com/questions/5488339/...
Peter Barbanyaga

Risposte:


259

Utilizzando JDK 1.6 o successivo

È stato sottolineato da Justin nei commenti seguenti che keytool da solo è in grado di farlo utilizzando il seguente comando (anche se solo in JDK 1.6 e versioni successive):

keytool -importkeystore -srckeystore mypfxfile.pfx -srcstoretype pkcs12 
-destkeystore clientcert.jks -deststoretype JKS

Utilizzando JDK 1.5 o inferiore

OpenSSL può fare tutto. Questa risposta su JGuru è il metodo migliore che ho trovato finora.

Innanzitutto assicurati di avere OpenSSL installato. Molti sistemi operativi lo hanno già installato come ho trovato con Mac OS X.

I due comandi seguenti convertono il file pfx in un formato che può essere aperto come archivio chiavi Java PKCS12:

openssl pkcs12 -in mypfxfile.pfx -out mypemfile.pem
openssl pkcs12 -export -in mypemfile.pem -out mykeystore.p12 -name "MyCert"

NOTA che il nome fornito nel secondo comando è l'alias della tua chiave nel nuovo archivio chiavi.

È possibile verificare il contenuto dell'archivio chiavi utilizzando l'utilità keytool Java con il seguente comando:

keytool -v -list -keystore mykeystore.p12 -storetype pkcs12

Infine, se necessario, puoi convertirlo in un archivio chiavi JKS importando l'archivio chiavi creato sopra in un nuovo archivio chiavi:

keytool -importkeystore -srckeystore mykeystore.p12 -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS

28
non sono necessari tutti e tre i passaggi, basta eseguire: keytool -importkeystore -srckeystore mykeystore.pxf -destkeystore clientcert.jks -srcstoretype pkcs12 -deststoretype JKS
JustinMorris

Penso che le versioni precedenti di keytool non te lo permetterebbero. Ricordo che 8 anni fa avrei dovuto eseguire openssl ma ora con keytool in Oracle JDK 6 e 7, funziona a meraviglia, proprio come ha detto Justin.
David Brossard

2
Tieni presente che ho dato quella risposta in una forma più semplice con maggiori dettagli un anno prima di Justin.
gjpc

@gjpc notato. La tua risposta è molto completa e merita molti voti
positivi

Questa è davvero un'ottima risposta e mi ha salvato dopo giorni di ricerca. Questa risposta merita davvero molti più voti positivi. Grazie Signore.
Mythul

22

jarsigner può utilizzare il tuo file pfx come keystore per firmare il tuo jar. Assicurati che il tuo file pfx abbia la chiave privata e la catena di certificati quando lo esporti. Non è necessario convertire in altri formati. Il trucco è ottenere l' alias del tuo file pfx:

 keytool -list -storetype pkcs12 -keystore your_pfx_file -v | grep Alias

Una volta ottenuto il tuo alias, firmare è facile

jarsigner.exe -storetype pkcs12 -keystore pfx_file jar_file "your alias"

I due comandi precedenti ti chiederanno la password che hai specificato durante l'esportazione pfx. Se si vuole avere la password appendere fuori in uso chiaro la -storepass interruttore prima della -keystore interruttore

Una volta firmato, ammira il tuo lavoro:

jarsigner.exe -verify -verbose -certs  yourjarfile

1
+1 per non dover convertire il file keystore (ce l'ho già in formati sufficienti!)
Trejkaz

22

Ho trovato questa pagina che ti dice come importare un PFX in JKS (Java Key Store):

keytool -importkeystore -srckeystore PFX_P12_FILE_NAME -srcstoretype pkcs12 -srcstorepass PFX_P12_FILE -srcalias SOURCE_ALIAS -destkeystore KEYSTORE_FILE -deststoretype jks -deststorepass PASSWORD -destalias ALIAS_NAME

3
Questa dovrebbe essere la risposta completa!
JustAGuy

Stavo cercando una risposta come questa - con nome alias
user3437460

Ho un problema, il pfx non ha una password, quindi -srcstorepassè il mio problema. Questo PFX è stato creato da un client LetsEncrypt per Windows
FiruzzZ

2

Il tuo file PFX dovrebbe contenere la chiave privata al suo interno. Esporta la chiave privata e il certificato direttamente dal tuo file PFX (es. Utilizzando OpenSSL) e importali nel tuo keystore Java.

modificare

Ulteriori informazioni:

  • Scarica OpenSSL per Windows qui .
  • Esporta chiave privata: openssl pkcs12 -in filename.pfx -nocerts -out key.pem
  • Certificato di esportazione: openssl pkcs12 -in filename.pfx -clcerts -nokeys -out cert.pem
  • Importa chiave privata e certificato nel keystore Java utilizzando keytool.

potresti dirmi come posso importare key.pem e cert.pem usando keytool?
Sad Al Abdullah

1
Piccola aggiunta: devi aggiungere -nodes alla fine quando esporti private ky
morgan_il

2

Justin (sopra) è accurato. Tuttavia, tieni presente che a seconda di chi ottieni il certificato (CA intermedia, CA radice coinvolta o meno) o di come viene creato / esportato il pfx, a volte potrebbe mancare la catena del certificato. Dopo l'importazione, avresti un certificato di tipo PrivateKeyEntry, ma con una catena di lunghezza 1.

Per risolvere questo problema, ci sono diverse opzioni. L'opzione più semplice nella mia mente è importare ed esportare il file pfx in IE (scegliendo l'opzione di Includere tutti i certificati nella catena). Il processo di importazione ed esportazione dei certificati in IE dovrebbe essere molto semplice e ben documentato altrove.

Una volta esportato, importa il keystore come indicato sopra da Justin. Ora, avresti un keystore con certificato di tipo PrivateKeyEntry e con una lunghezza della catena di certificati superiore a 1.

Alcuni client di servizi Web basati su .Net si interrompono (impossibile stabilire una relazione di fiducia), se non si esegue quanto sopra.


Questo non sembra funzionare su IE11. Non riesce a includere la catena di certificati anche se glielo dico. So che in passato ha funzionato.
Brian Knoblauch

0

Se si lavora con JDK 1.5 o inferiore, l'utility keytool non avrà l' -importkeystoreopzione (vedere la documentazione keytool JDK 1.5 ) e la soluzione di MikeD sarà disponibile solo trasferendo il .pfxsu una macchina con un JDK più recente (1.6 o superiore).

Un'altra opzione in JDK 1.5 o inferiore (se si dispone del prodotto Oracle WebLogic), è seguire le istruzioni di questo documento Oracle: Utilizzo dei formati di certificato PFX e PEM con i keystore . Descrive la conversione in .pemformato, come estrarre le informazioni sui certificati da questo formato testuale e importarle in .jksformato con l' java utils.ImportPrivateKeyutilità (questa è un'utilità inclusa con il prodotto WebLogic).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.