Come impostare Java VM per utilizzare i certificati root (truststore) gestiti da Mac OS X


Ottengo la seguente eccezione durante l'utilizzo della libreria scribe OAuth.

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 configurare in qualche modo il truststore JVM.

Perché devo farlo? Come posso istruire la VM Java a utilizzare il truststore predefinito del sistema operativo? (Mac OS X nel mio caso).

Author: Tamas, 2013-01-11

3 answers

Posso configurare il truststore predefinito aggiungendo questo sistema corretto all'avvio della VM:

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

Ancora non capisco perché ho bisogno di farlo. Questo dovrebbe essere l'impostazione predefinita. È anche molto fastidioso aggiungere questo ogni volta. C'è un modo migliore, ad esempio alcune impostazioni del sistema operativo?

 8
Author: Tamas, 2016-12-28 16:01:53

Ah! conosco questo problema. Ho avuto un problema simile ed era correlato ai binding Java in OSX. Una volta installata l'ultima versione, è stata riparata.

Https://support.apple.com/en-us/HT204036

 0
Author: blganesh101, 2016-12-28 15:46:45

Penso che sia chiaro a tutti che JAVA ha bisogno di un modo per identificare il truststore predefinito, quando si ha a che fare con SSL, quindi questa informazione è stata passata a JAVA in qualche modo, quindi penso che la domanda "aggiornata" in mano sia come farlo in un modo fai-da-una-volta-e-poi-dimentica-ogni volta.

Il modo migliore che ho potuto trovare è stato impostando la variabile di ambiente JAVA_TOOL_OPTIONS a livello di sistema operativo, se questa variabile di ambiente è impostata, JAVA verrà avviato di default con gli argomenti forniti in questa variabile d'ambiente.

Quindi, non è necessario impostare -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts ogni volta che JVM viene lanciato, invece impostato JAVA_TOOL_OPTIONS variabile d'ambiente "una volta" a livello del sistema operativo con valore come -Djavax.net.ssl.trustStore=/Library/Java/Home/lib/security/cacerts e poi hai finito.

Di seguito è riportato l'estratto dal n. 1 di "Ulteriori letture":

Quando questa variabile d'ambiente è impostata, la funzione JNI_CreateJavaVM (nell'API di invocazione JNI) antepone il valore dell'ambiente variabile alle opzioni fornito nel suo argomento JavaVMInitArgs.

Solo avvertimento a cui prestare attenzione è menzionato di seguito, estratto dal n. 1 di "Ulteriori letture":

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

Di seguito è riportato un altro avvertimento (estratto dal n. 1 di "Ulteriori letture") a cui prestare attenzione, ma penso che dal momento che il contesto non riguarda l'argomento di selezione della VM, quindi non è rilevante, ma solo per menzionarlo.

Poiché questa variabile d'ambiente viene esaminata nel momento in cui JNI_CreateJavaVM è chiamato, non può essere utilizzato per aumentare il comando linea con le opzioni che normalmente sarebbero gestite dal programma di avvio, per esempio, selezione VM utilizzando l'opzione-client o-server.

Ulteriore letture:

 0
Author: hagrawal, 2016-12-29 01:22:24