2010-06-29 17 views
8

Stavo giocando con la sicurezza in Java e Tomcat e sono arrivato al punto in cui ero curioso di sapere quale keystore/truststore è stato caricato dalla JVM alla fine. Anche se avevo creato il mio keystore e in configurazione Tomcat, questo era usato sia come keystore che come trustore, la realtà era che il file cacerts di default era caricato come truststore (come keystore, il mio file era usato correttamente).Ottieni l'istanza del keystore caricato da JVM per impostazione predefinita

Stavo cercando di ottenere il nome del file caricato da JVM, ma non ho trovato la soluzione. La mia idea era di ottenere System.getProperty ("javax.net.ssl.keyStore") ma questo mi ha dato nulla. Ho provato a impostare questo sia in server.xml di Tomcat tramite Connector e come parametro della riga di comando -Djavax.net.ssl.keyStore = "file". Sono sicuro che il parametro della riga di comando è stato fornito correttamente poiché sto impostando i parametri JMX nello stesso posto.

br, Martin

+0

Non esiste alcun KeyStore predefinito. C'è un truststore predefinito, ma il suo nome non è disponibile. – EJP

risposta

1

Sei su Tomcat 6?

Ho provato a installare questo catalina.bat come

set JAVA_OPTS=%JAVA_OPTS% %LOGGING_CONFIG% -Djavax.net.ssl.keyStore="path-to-file" 

e riflette nel mio codice utilizzato come System.getProperty("javax.net.ssl.keyStore")

Inoltre, per le informazioni, c'era un altro Bugzilla on SSL attributi di essere ignorato che è stato risolto in 6.0.16. keyStore non è menzionato specificamente lì, ma la mia versione è 6.0.20 e funziona

+0

La versione che ho provato era 6.0.26. Il modo in cui sto impostando i parametri è impostare JAVA_OPTS in setenv. (Sh | bat). – Martin

4

Non sarà necessariamente possibile ottenere esattamente ciò che si desidera dal nome del file anche del tipo e l'impostazione dello keystore nel connettore sarà non ha assolutamente alcun effetto sulla proprietà del sistema.

Inoltre, il keystore, se specificato dalla proprietà javax.net.ssl.keyStore o istanziato in modo esplicito, è solo una parte dell'impostazione di KeyManager e SSLContext. (Per impostazione predefinita, Apache Tomcat utilizzerà i file e un meccanismo di caricamento relativamente semplice, ma è anche possibile personalizzarlo utilizzando Tomcat SSLImplementation.) Se vuoi davvero vedere cosa viene caricato, guarderei lo JSSE debugging flags, in particolare, qualcosa in questo modo:

-Djavax.net.debug=SSL,keymanager,trustmanager 

EDIT: dovrei aggiungere che non v'è alcun archivio chiavi di default in generale (al di fuori del contesto di Tomcat), solo una truststore di default. Per impostazione predefinita, Tomcat JSSEImplementation utilizza System.getProperty("user.home") + "/.keystore".

+0

Una cosa che può essere fonte di confusione in Tomcat è che il file del keystore è configurato usando l'attributo 'keystore' mentre il file truststore è configurato usando l'attributo' truststoreFile'. – Bruno

+0

Ho avuto la configurazione elencata qui sotto, ma i certificati attendibili sono stati caricati da cacerts in JRE/lib/security. keystoreFile = "conf/keystore.jks" truststoreFile = "conf/keystore.jks" – Martin

+0

Provare a usare 'keystore =' invece di 'keystoreFile =' (ma mantenere 'truststoreFile'). – Bruno

Problemi correlati