2012-04-03 7 views
2

Ich habe ein Jar für meine JavaAppliaction.Von dieser Anwendung habe ich eine Verbindung zu Servlet (Ich übergabe Name und Passwort von Swing zu Servlet) im WebApplicaton (hier bin ich nur Name und Passwort im Servlet anzeigen).Java-Anwendung mit HTTP-Verbindung: "Connection refused error"

Ich gebe Daten über SSL-Verbindung (Https). Es funktioniert gut in meinem System. Aber als ich versuchte, jar in einem anderen System zu laufen, erhalte ich "Verbindung zurückgewiesener Fehler".

Hinweis: Running jar in einem anderen System, das Daten über HTTP-Verbindung übergibt, funktioniert einwandfrei.

Ich bin durch diese link gegangen, die mir vorschlug, eine "jssecacerts" -Datei zu erstellen und sie in den Ordner "JAVA_HOME/jre/lib/security" des "anderen Systems" einzufügen. Aber ich bekomme immer noch denselben Fehler. Warum funktioniert das nicht ??

+1

Haben Sie einen Stacktrace? – beny23

+0

Haben Sie Ihre Firewall-Einstellungen überprüft? – hage

+0

@ beny23: Ich habe die [Stacktrace] eingefügt (http://pastie.org/3719394) – user10101

Antwort

1

Eine mögliche Lösung: Versuchen Sie, das öffentliche Zertifikat in den Java-Standardschlüsselspeicher zu importieren.

keytool -importcert -trustcacerts -file "path-to-public-cert" -keystore JAVA_HOME/jre/lib/security/cacerts

es für Kennwort für Schlüsselspeicher Standardschlüsselspeicher Passwort gefragt ist "changeit"

Sie können das öffentliche Zertifikat erhalten, indem Sie Ihre URL in einem Webbrowser öffnen (z. B. Chrome), klicken Sie auf das Symbol am Anfang der URL -> klicken Sie auf Zertifikatsinformationen -> Registerkarte Details -> klicken Sie auf Export Schaltfläche.


A wird ein besserer Ansatz sein: mit "keytool" in JAVA_HOME/sind

  • Importieren Sie Ihre Server öffentlichen cert in diesem Schlüsselspeicher

    • einen Schlüsselspeicher erstellen.
    • bündeln Sie den Keystore mit Ihrer App.
    • machen eine Fledermaus/sh-Datei Ihr Glas bietet einen Parameter Befehl java -Djavax.net.ssl.trustStore =/path-to-your-Schlüsselspeicher

    Also jedes Mal die App es beginnt zu laufen wird diesen benutzerdefinierten Schlüsselspeicher verwenden. Sie müssen also die Datei jssecacerts nicht auf jedem System kopieren, auf dem Sie Ihre App ausführen.

  • +0

    Ich weiß die Tatsache zu schätzen, dass Sie versuchen zu helfen. Aber ich vermute, dass dies nicht die Antwort ist, nach der er sucht. Er bittet um eine Lösung für ein anderes Problem, oder? Auch ich habe eine andere Frage: Ist nicht das Einfügen der Jssacerts das gleiche, was Sie versuchen, mit einem Skript zu automatisieren, oder? –

    +0

    Ja, ich habe versucht, den Schritt des Kopierens von Jssacerts zu eliminieren. Bearbeitet hat der Beitrag eine mögliche Lösung hinzugefügt. – amitp

    +2

    "Java ist nicht in der Lage, das öffentliche Zertifikat zu finden, um mit dem Server zu kommunizieren" Dies ist eine schrecklich ungenaue Art, es zu formulieren. Der Fehler weist darauf hin, dass der Truststore des Clients dem Keystore des Servers nicht vertraut. Ihre Lösung ist richtig: Ihre Problemstellung ist nicht richtig. – EJP

    Verwandte Themen