Ho bisogno di sapere se è possibile recuperare una chiave da un KeyStore senza fornire lo 'storepass'. La documentazione here dice che "Quando si recuperano informazioni dal keystore, la password è opzionale; se viene data nessuna password, l'integrità delle informazioni recuperate non può essere controllato e viene visualizzato un avviso"KeyStore chiave get senza password
Tuttavia quando provo a ottengo la chiave senza password Ottengo "java.lang.IllegalArgumentException: password non può essere nulla" eccezione.
Di seguito è riportato come ho creato il KeyStore
keytool -genseckey -alias "myKey" -keystore KEYSTORE.jks -storepass "password" -storetype "JCEKS" -keyalg AES -keysize 128
E ho cercato di recuperare come segue
final KeyStore keyStore = KeyStore.getInstance("JCEKS");
keyStore.load(new FileInputStream(new File("C:\\temp\\keytool\\KEYSTORE.jks")),
null);
final Key key = keyStore.getKey("myKey", null);
che getta la seguente eccezione
java.lang.IllegalArgumentException: password can't be null
at com.sun.crypto.provider.SunJCE_z.<init>(DashoA13*..)
at com.sun.crypto.provider.JceKeyStore.engineGetKey(DashoA13*..)
at java.security.KeyStore.getKey(KeyStore.java:763)
Ho frainteso completamente la documentazione? C'è un altro modo per aggirare questo, perché non vedo il punto di memorizzare lo 'storepass' in chiaro nel mio codice in cui tutti possono vederlo, rendendo quindi la password inutile.
Sì, sembra che io ho frainteso il d OCUMENTAZIONE. Quindi c'è un modo appropriato per aggirare questo? Non riesco proprio ad avere una password del genere nel codice. Grazie – Nishant
Quindi il tuo problema è di evitare la password hardcoded nel codice? Questo è il problema più comune. Non puoi davvero fare molto. L'approccio consigliato in generale è richiedere la password all'utente. Se non puoi fare che puoi fare qualcosa di elaborato, ad es crittografare la password ma questo non ti aiuterà molto. Puoi anche delegare la responsabilità all'utente, ad esempio per mantenere il file system sicuro. – Cratylus