2013-01-11 10 views
11

Viene visualizzata la seguente eccezione durante l'utilizzo della libreria scribe OAuth.Come configurare Java VM per utilizzare i certificati radice (truststore) gestiti da Mac OS X

Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

Sulla base di alcuni googling sembra che dovrei impostare il truststore JVM in qualche modo.

Perché devo fare questo? Come posso istruire la Java VM a utilizzare il truststore predefinito dell'OS? (Mac OS X nel mio caso).

risposta

7

posso impostare il truststore di default aggiungendo questo propery sistema quando l'avvio del VM:

-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts 

Non riesco ancora a capire perché ho bisogno di fare questo. Questo dovrebbe essere il default. È anche molto noioso aggiungerlo ogni volta. C'è un modo migliore, ad es. alcune impostazioni del sistema operativo?

0

penso che sia chiaro a tutti che Java ha bisogno di un modo per identificare il truststore impostazione predefinita, quando si tratta di SSL, in modo che questa informazione è essere passato a JAVA, in qualche modo, quindi penso che il "aggiornamento "La domanda in mano è come farlo in un modo do-it-one-and-then-forget-everytime.

Il modo migliore che ho trovato è stato impostare la variabile di ambiente JAVA_TOOL_OPTIONS a livello di sistema operativo, se questa variabile di ambiente è impostata, JAVA verrà avviato per impostazione predefinita con gli argomenti forniti in questa variabile di ambiente.

Quindi, non c'è bisogno di impostare-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacertsogni volta che viene lanciato JVM, invece impostareJAVA_TOOL_OPTIONSvariabile d'ambiente "una volta" al vostro livello di sistema operativo con valore-Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacertse poi si è fatto.

riportano di seguito le estratto dal 1 ° "Ulteriori letture":

Quando questa variabile è impostata, la funzione JNI_CreateJavaVM (nel JNI Invocation API) antepone il valore della variabile di ambiente alle opzioni fornite nel suo argomento JavaVMInitArgs.

unica avvertenza di guardare fuori è indicato di seguito, estratto dal 1 ° "Ulteriori letture":

In alcuni casi questa opzione è disabilitata per motivi di sicurezza, per esempio, sul sistema operativo Solaris il l'opzione è disabilitata quando l'utente effettivo o ID di gruppo differisce dall'ID reale.

Qui di seguito è un altro avvertimento (estratto dal # 1 di "Ulteriori letture") a cui prestare attenzione, ma penso che in quanto contesto non si tratta di argomento selezione VM quindi non è rilevante, ma solo per citare.

Poiché questa variabile viene esaminato al momento JNI_CreateJavaVM è chiamato, non può essere utilizzato per aumentare la linea di comando con opzioni che normalmente essere gestiti dal programma di avvio, per esempio, selezione VM utilizzando la -client o l'opzione -server.

Approfondimenti: