Https Verbindung wird aus jar heraus nicht aufgebaut

Status
Nicht offen für weitere Antworten.

Lay-C

Aktives Mitglied
Morgen,

Ich schreibe zur Zeit ein Programm, das sowohl eine unverschlüsselte (http) als auch eine verschlüsselte Verbindung zu einem Server aufbauen soll.

Direkt aus eclipse heraus funktioniert das ganze auch.
Nur mit "java -jar Programm.jar" kann ich nur eine http Verbindung aufbauen.
Bei https kommt keine Fehlermeldung aber es hängt sich einfach auf.

die Https Verbindung wird aufgebaut über
Code:
SocketFactory socketFactory = SSLSocketFactory.getDefault();
	        socket = socketFactory.createSocket(host, 443);

Ich gebe dem Programm mit dem VMArgument
Code:
-Djavax.net.ssl.trustStore="Absoluter Pfad zum keystore"
den Pfad zum keystore an...

Allerdings hab ich den Befehl ja in Eclipse eingegeben. Wie gebe ich das Argument an die jar weiter?
Oder könnte es an was anderem liegen?
 
das -D.... musst du genauso beim starten des jars mit angeben. Das wird nicht im fertigen Jar gespeichert. Du könntest aber evtl. versuchen das Property im Code von Hand zu setzen.
 
Hmm ok...
also da das Programm für "normale Windows User" benutzbar sein soll, kann ich keine parameter in der Konsole übergeben lassen.

würde das ganze im Programm dann so aussehen?
Code:
System.setProperty("javax.net.ssl.trustStore", "keys");

die Datei keys ist im "src" Ordner des jars, darin sind auch die packages mit den source dateien.
wenn ich die Bilder in jar://src/image/bild.png aufrufe mach ich das ja auch über "/image/bild.png"

so hab ich es nämlich jetzt und es funktioniert trotzdem nicht
 
Kann mir keiner helfen?
Ich finde nirgends wie das ganze funktioniert... hab schon mehrere Möglichkeiten durchprobiert:

Code:
System.setProperty("javax.net.ssl.trustStore", "keys");
System.setProperty("-Djavax.net.ssl.trustStore", "keys");
System.setProperty("javax.net.ssl.trustStore", "/keys");
System.setProperty("-Djavax.net.ssl.trustStore", "/keys");
System.setProperty("javax.net.ssl.trustStore", "\\keys");
System.setProperty("-Djavax.net.ssl.trustStore", "\\keys");

und nichts davon funktioniert...
 
imho musst du eine korrekte url angeben wenn der keystore im jar liegt. also getClass().getResource("/keys").toString() oder so
 
also die keys ist jetzt im gleichen Verzeichnis wie die class Dateien und ich setze mit:

Code:
String s = getClass().getResource("keys").toString();
		System.out.println(s);
		System.setProperty("javax.net.ssl.trustStore",s);

als Ergebnis bekomm ich dann:
jar:file:/C:/Dokumente%20und%20Einstellungen/Dominik/Desktop/FIX/FIX.jar!/client/keys

was auch der richtige Pfad ist.

Dennoch trotzdem bekomm ich den noch ne Exception die ich aber nicht lesen kann, da sich die Konsole aufhängt.
 
Die Konsole hängt sich auf? Hab ich noch nie gesehn.

Nimm halt ein Logging-Framework und schreib die Exceptions damit in eine Datei. Wenn du uns dann die ganze Exception zeigst ...
 
Code:
javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
	at com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Alerts.java:190)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1591)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1554)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1537)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1463)
	at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:64)
	at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:73)
	at java.io.DataOutputStream.writeBytes(DataOutputStream.java:259)
	at client.HttpClient.send(HttpClient.java:79)
	at client.Sender.send(Sender.java:75)
	at client.AppletFrame.actionPerformed(AppletFrame.java:137)
	at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
	at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
	at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
	at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
	at java.awt.Component.processMouseEvent(Component.java:6134)
	at javax.swing.JComponent.processMouseEvent(JComponent.java:3265)
	at java.awt.Component.processEvent(Component.java:5899)
	at java.awt.Container.processEvent(Container.java:2023)
	at java.awt.Component.dispatchEventImpl(Component.java:4501)
	at java.awt.Container.dispatchEventImpl(Container.java:2081)
	at java.awt.Component.dispatchEvent(Component.java:4331)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4301)
	at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3965)
	at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3895)
	at java.awt.Container.dispatchEventImpl(Container.java:2067)
	at java.awt.Window.dispatchEventImpl(Window.java:2458)
	at java.awt.Component.dispatchEvent(Component.java:4331)
	at java.awt.EventQueue.dispatchEvent(EventQueue.java:599)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269)
	at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169)
	at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161)
	at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
	at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:59)
	at sun.security.validator.Validator.getInstance(Validator.java:161)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:108)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:204)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:623)
	at com.sun.net.ssl.internal.ssl.AppOutputStream.write(AppOutputStream.java:59)
	... 30 more
Caused by: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
	at java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:183)
	at java.security.cert.PKIXParameters.<init>(PKIXParameters.java:103)
	at java.security.cert.PKIXBuilderParameters.<init>(PKIXBuilderParameters.java:87)
	at sun.security.validator.PKIXValidator.<init>(PKIXValidator.java:57)
 
Kann mir keiner helfen?

Oder braucht ihr noch mehr Informationen?

Wär echt toll wenn ich das irgendwie noch hinbekommen würde 😉
 
also zu der fehlermeldung gibts doch mehr als genug treffer bei google. im ersten steht sogar die lösung bzw erklärung.
 
Hab ich auch schon gelesen. Aber entweder versteh ichs nich richtig oder ich mach was falsch...

Ich hab das Zertifikat der Seite, hab einen keyStore erstellt (eben meine keys Datei) und hab sie eingebunden (oder es zumindest versucht)

Aber irgendwie geht es trotzdem nicht.
 
Was mir gerade noch auffällt, woran ich vorher garnicht gedacht habe, ist, dass das ganze als Applet von dem jeweiligen Server gestartet werden soll.

Und da das ganze auf verschiedenen Servern laufen soll, kann ich ja nicht nur das Zertifikat des einen Servers mitgeben.
 
Ok Problem wurde gelöst, am Anfang hat nur der Pfad nicht wirklich gestimmt, und warum es dann aus dem jar heraus nicht geladen werden konnte weiß ich nicht.

jetzt muss auf dem Server halt ein Keystore existieren, aber das ist ja kein so großes Problem.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben