2011-10-18 13 views
24

Quindi, ho problemi con LDAP. Ho un caso di test di integrazione che si spera funzionerà, ma attualmente sta correndo nei problemi di sicurezza di LDAPS con l'handshake SSL.Come posso importare un file keystore Java (.jks) esistente in un'installazione Java?

Sono in grado di connettersi a LDAPS con Apache Directory Studio e ha scaricato il keystore in un file "permanent.jks".

Va bene, ma voglio il mio test di integrazione, che risiede in Eclipse utilizzando un JRE, per essere in grado di connettersi al server LDAP utilizzando questo keystore.

Come posso prendere questo keystore e importarlo nel JRE per uso proprio?

risposta

34

Ok, quindi qui è stato il mio processo:

keytool -list -v -keystore permanent.jks - mi ha fatto l'alias.

keytool -export -alias alias_name -file certificate_name -keystore permanent.jks - mi ha ottenuto il certificato da importare.

Poi ho potuto importare con il comando keytool:

keytool -import -alias alias_name -file certificate_name -keystore keystore location

Come @Christian Bongiorno dice l'alias non può esistere già nel vostro keystore.

+2

L'ho fatto funzionare ma con un ammendamento (se si desidera modificare la risposta). Nel processo di importazione, la parte in cui si ha "nome alias" (BTW: non un nome di variabile grande con uno spazio), questo deve essere un alias che non esiste già nell'archivio di destinazione. Se non si specifica l'alias, il valore predefinito è "1" - è possibile utilizzare il passaggio 1 per elencare gli alias dalla destinazione prima di installare –

+2

Nell'ultimo passaggio (importazione), ho ricevuto l'errore 'keytool error: java.io. IOException: il keystore è stato manomesso o la password non era corretta. Anche se il passaggio precedente (esportazione), posso completare con successo la mia password. Sai perché è? –

+0

@ThaiTran Per i futuri lettori, quando si importa un certificato, assicurarsi di utilizzare la password del file cert di destinazione, non la password utilizzata per creare il certificato in primo luogo. Si noti inoltre che su molti sistemi, il JDK è di proprietà di root. Se questo è il caso, è necessario eseguire il comando keytool -import come root. – BRasmussen

25

per caricare un KeyStore, è necessario indicare il tipo di archivio chiavi (probabilmente jceks), fornire un inputstream e una password. quindi, è possibile caricare in questo modo:

KeyStore ks = KeyStore.getInstance(TYPE_OF_KEYSTORE); 
ks.load(new FileInputStream(PATH_TO_KEYSTORE), PASSWORD); 

questo può gettare un KeyStoreException, in modo da poter circondare in un blocco try se ti piace, o ri-lancio. Tenete a mente un archivio di chiavi può contenere più chiavi, quindi avrai bisogno di guardare la vostra chiave con un alias, ecco un esempio con una chiave simmetrica:

SecretKeyEntry entry = (KeyStore.SecretKeyEntry)ks.getEntry(SOME_ALIAS,new KeyStore.PasswordProtection(SOME_PASSWORD)); 
SecretKey someKey = entry.getSecretKey(); 
+0

hai salvato la vita. Non stavo caricando il keystore correttamente, fino a quando non sono arrivato al tuo esempio. Peccato che non posso darti 10000 punti per quello. Grazie mille!! – raspayu

+0

felice di aiutare! i tuoi ringraziamenti valgono più di pochi punti :). –

12

È possibile l'importazione di massa tutti gli alias da un archivio di chiavi a un altro:

keytool -importkeystore -srckeystore source.jks -destkeystore dest.jks 
+0

può funzionare questo comando? – mike

+0

@mike cosa intendi? – qwertzguy

+0

questo funziona, e davvero bene: D – Aspekt

Problemi correlati