Domanda

Devo firmare l'applicazione Android (.apk).
Io ho .pfx file.L'ho convertito in .cer file tramite Internet Explorer e poi convertito .cer A .keystore utilizzando lo strumento chiave.Poi ho provato a firmare .apk con jarsigner ma dice che .keystore non contiene una chiave privata.

Cosa sto facendo di sbagliato?

È stato utile?

Soluzione

Utilizzo di JDK 1.6 o versioni successive

E 'stato sottolineato da Justin nei commenti qui sotto che keytool da solo è in grado di fare questo usando 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

Utilizzo di JDK 1.5 o seguente

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

In primo luogo assicurarsi di avere OpenSSL installato. Molti sistemi operativi hanno già installato come ho scoperto con Mac OS X.

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

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

Si noti che il nome fornito nel secondo comando è l'alias della chiave nel nuovo negozio chiave.

È possibile verificare il contenuto chiavi usando l'utility Java keytool con il seguente comando:

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

Infine, se avete bisogno di è possibile convertire ad un JKS chiavi importando chiavi creato in precedenza in un nuovo archivio delle chiavi:

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

Altri suggerimenti

jarsigner può utilizzare il tuo file pfx come archivio chiavi 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 il file Alias del tuo file pfx:

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

Una volta che hai il tuo alias, firmare è facile

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

I due comandi precedenti ti richiederanno la password specificata in pfx export.Se vuoi che la tua password sia visibile in chiaro usa il file -negozio passare prima del -archivio chiavi interruttore

Una volta firmato, ammira il tuo lavoro:

jarsigner.exe -verify -verbose -certs  yourjarfile

questa pagina che ti dice come importare un PFX per 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

Il file PFX deve contenere la chiave privata all'interno di esso. Esportare la chiave privata e il certificato direttamente dal file PFX (ad esempio utilizzando OpenSSL) e importarli nel vostro chiavi Java.

Modifica

Per ulteriori informazioni:

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

Justin (sopra) è preciso. Tuttavia, tenere presente che a seconda di chi si ottiene il certificato da (CA intermedio, CA principale coinvolto o no) o come viene creata la pfx esportato, a volte potevano mancare la catena / certificato. Dopo l'importazione, si dovrebbe avere un certificato di tipo PrivateKeyEntry, ma con una catena di lunghezza 1.

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

Una volta esportato, importare l'archivio di chiavi come Justin ha sottolineato in precedenza. Ora, si avrebbe un keystore con certificato di tipo PrivateKeyEntry e con una lunghezza di catena di certificati di oltre 1.

Alcuni client di servizi Web basati .Net errore fuori (in grado di stabilire una relazione di fiducia), se non fai quanto sopra.

Se si lavora con JDK 1.5 o sotto l'utilità keytool non avrà l'opzione -importkeystore (vedi JDK 1.5 keytool documentazione ) e la soluzione MikeD saranno disponibili solo trasferendo la .pfx su una macchina con una nuova JDK (1.6 o superiore).

Un'altra opzione in JDK 1.5 o al di sotto (se si dispone di Oracle WebLogic prodotto), è quello di seguire le istruzioni di questo documento di Oracle: Uso PFX e PEM certificato formati con Keystore . Esso descrive la conversione in formato .pem, come estrarre le informazioni dei certificati da questo formato testuale, e importarlo in formato .jks con l'utilità java utils.ImportPrivateKey (si tratta di un programma di utilità incluso con il prodotto WebLogic).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top