Hinzufügen eines ausländischen server selbst signiertes Zertifikat zu den vertrauenswürdigen Zertifikaten von meinem Tomcat

Mein Tomcat verbinden muss anderen web-server (bei https://foreign.example.com) mit SSL (TLS).

foreign.example.com hat ein selbst-signiertes Zertifikat, dem ich vertraue. Natürlich, mein Tomcat nicht standardmäßig - also ich muss es sagen. Ein Weg dies zu tun ist:

$JRE/bin/keytool -import -alias my -file ssl-cert-myselfsigned.cer -keystore 
 $JRE/lib/security/cacerts

Dies funktioniert: Mein Tomcat ermöglicht die SSL-Verbindung.

Aber ich nicht, wie zu tun es auf diese Weise: Es importiert das Zertifikat in den vertrauenswürdigen Schlüssel von meiner Java-installation. Ich will nicht sagen: "Jede Anwendung, die läuft Java auf meinem Rechner sollten darauf Vertrauen, dass Zertifikat". Nur Tomcat (oder der Benutzer, der Tomcat läuft) sollte ihm Vertrauen.

So, ich habe versucht Sie zu importieren in das tomcat-Benutzer-keystore zu ~/.keystore und einrichten des Tomcat <Connector> mit diesen Parametern:

keystoreFile="${user.home}/.keystore"
keystorePass="thePassphraseICreatedTheKeystoreWith"

Jedoch, dass überhaupt nicht funktioniert (ich glaube, das ist nur für das server-Zertifikat von meinem Kater, nicht für die server-Zertifikate von ausländischen Servern, richtig?)

Habe ich versucht, das gleiche mit den truststoreFile/truststorePass Attribute, aber Sie hat nicht funktioniert. (Die Attribute sind dokumentiert bei http://tomcat.apache.org/tomcat-6.0-doc/config/http.html)

Gibt es eine Möglichkeit zum einrichten der Tomcat mit dem fremden server die server-cert, oder vielleicht fügen Sie einige Kommandozeilen-Parameter, um java was macht mein keystore (und keystore passphrase) zur Verfügung, um die JVM-Instanz?

  • Können Sie näher erläutern, was funktioniert nicht, wenn Sie eine Kopie von "$JRE/lib/security/cacerts", importieren Sie Ihre spezifischen cert in es und verwenden Sie die truststoreFile/truststorePass Attribute? Es sollte funktionieren. (Und ja, der "keystore keystore" für Ihre Anmeldeinformationen, nicht so, wie du Vertrauen remote-Zertifikate.)
  • Ah, Blick in die (sehr umfangreiche) logs sehe ich, dass ich bin immer java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must not be empty - was bedeutet, dass es nicht das finden die truststore-Datei... ich Frage mich, ob vielleicht ${user.home} nicht an diesem Ort arbeiten?
  • Tut mir Leid, ich sollte haben erkannt, dass dies früher, aber die truststore Parameter nur diktieren das Verhalten des connectors (d.h. für den client-certs). Wenn Sie sagen, "Mein Tomcat benötigt, um eine Verbindung zu einem anderen web-server", ich denke mal, deine webapp ist der client, nicht der Behälter (und definitiv nicht der Stecker). Das Vertrauen config ändern sich, je nachdem die client-lib. Die Standard - SSLContext (die es wahrscheinlich zu verwenden, wenn nichts anderes angegeben ist) konfiguriert ist, über die javax.net.ssl.trustStore system-Eigenschaft. Wenn Sie wollen, dass eine lokale Konfiguration, die wir brauchen, um zu wissen, welche client-Bibliothek, die Sie verwenden.
  • Vielen Dank! Dieser geklärt - der trustStore kann nicht konfiguriert werden, in den Stecker. Mit dem Kommandozeilen-Parameter - zusammen mit Ihrer Methode der cacerts kopieren und fügen Sie den Schlüssel, es funktioniert.
Schreibe einen Kommentar