2013-02-20 10 views
6

Ich habe eine benutzerdefinierte SSL-Factory, wo ich meinen eigenen Truststore laden.Wie wird ein Keystore geladen, der sich im Ressourcenordner (Maven) befindet?

Wenn ich jetzt setzen die truststore.jks in die Projektstammordner-Datei, funktioniert es mit der folgenden Zeile:

ks.load(new FileInputStream("/truststore.jks", passphrase); 

Aber ich möchte, dass meine truststore in meinem Ressource-Ordner, der mit Maven gebaut wurde, wo die Pfad ist src/main/resources.

Dann ich tun und es nicht mit der folgenden Zeile arbeiten:

ks.load(this.getClass().getResourcesAsStream("/truststore.jks"), passphrase); 

Obwohl der Eingangsstrom vorhanden ist. Ich habe nachgeschaut. Es schlägt nur fehl, wenn ich ks.load (...) mache.

Die Ausnahme, die ich erhalte, ist:

java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty 

Warum das so ist?

Grüße, Dave

+0

eine Sache, die Sie versuchen könnten, in den Sinn kommt. Geben Sie in Ihrem getResourceAsStream "/truststore.jks" an, damit vom Stamm des Klassenpfads aus gesucht wird. –

+0

Ich habe das auch versucht, ohne Glück ... –

Antwort

0

Seltsam, es funktioniert jetzt ...

I

Properties systemProps = System.getProperties(); 
systemProps.put("javax.net.ssl.trustStore", "/truststore.jks"); 
systemProps.put("javax.net.ssl.trustStorePassword", "changeit"); 
System.setProperties(systemProps); 

hatte und die zweite Zeile

systemProps.put("javax.net.ssl.trustStore", "src/main/resources/truststore.jks"); 

Wer weiß, warum

ändern? Ist diese Lösung in Ordnung?

+4

Dies funktioniert nur in Ihrer lokalen Entwicklungsumgebung. Sobald Sie Ihr Artefakt erstellt haben, wird der Pfad 'src/main/resources' ungültig. – vegemite4me

+1

Bitte aktualisieren Sie Ihre ursprüngliche Frage, anstatt eine neue Frage als Antwort zu posten –

+0

Diese Lösung hat nichts damit zu tun, dass der Truststore eine Ressource ist. Deine Antwort (wie bereits erwähnt) funktioniert nur während der Entwicklung, also arbeite ich nicht! –