Accesskeys: Mit n zur Navigation, mit c zum Inhalt

Diese Webseite verwendet Cookies zum Spamschutz, zur dauerhaften Sprachauswahl, zum dauerhaften einloggen und für Statistiksoftware.

Mit Nutzung dieser Webseite erklären Sie sich damit einverstanden. Datenschutzerklärung

Webservices aus Tomcat 6 über SSL ansprechen

Inhalt:

1. Tomcat 6 SSL fähig machen
2. Server-Zertifikat dem Bund vertrauter Zertifikate hinzufügen
3. Anhang
3.1 Fehlersuche
3.2 Quellen


 

Tomcat 6 SSL fähig machen

Es gibt zwei Wege Tomcat OpenSSL nahe zu bringen.

Über JSSE oder mit der nativen APR.

Sollte man die native Apache Portable Runtime für seine Tomcat nutzen, ist es sehr einfach den Tomcat für ssl Verbindungen zu konfigurieren.

Ob man die APR nutzt, kann man an folgendem Output der Konsole erkennen, wenn man den Tomcat startet:

INFO: Loaded APR based Apache Tomcat Native library 1.1.14.

 

Ist dieser Output zu erkennen, könne wir die server.xml öffnen und nach folgendem Eintrag suchen:


 

 

Es ist sicher zu stellen, dass das Attribut SSLEngine=“on“ gesetzt ist, da weitere Konfiguartionen ansonsten sinnlos wären.

Jetzt müssen wir nur noch einen Connector für SSL Verbindungen definieren.

Wichtig hierbei ist einen Port zu verwenden der nicht schon von anderen Connectoren genutzt wird, z.B. 8443, und das Attribut SSLEnabled="true".

 

Server-Zertifikat dem Bund vertrauter Zertifikate hinzufügen

Ein Problem beim testen von Webservices mit JAVA über SSL, ist die Tatsache, dass als „unsicher“ eingestufte Zertifikate u.A. zu solchen Fehlermeldung führen:

PKIX path building failed: 
sun.security.provider.certpath.SunCertPathBuilderException: 
unable to find valid certification path to requested target 

 

Hintergrund ist die Tatsache, dass ein Webservice in der Regel nicht von einem interaktiven Nutzer angesprochen wird, der im Zweifel die Gültigkeit des Zertifikates überprüfen und bestätigen kann. Anders als wir das aus dem Webbrowser kennen, werden Webservices hauptsächlich von anderen Applikationen im Netz angesprochen. Also wird standardmässig eine Exception geworfen, wenn der Schlüssel nicht zertifiziert ist oder das Zertifikat nich.

Möchte man dennoch eine Verbindung über https (SSL) zu diesem Webservice aufbauen, muss das Zertifikat des Schlüssels des angesprochenen Servers in den Bund der vertrauten Zertifikate übernommen werden.

Um dies bei einer Tomcat 6 Installation zu erreichen, gibt es ein kleines, aber effektives, Hilfsprogramm von SUN.

Dieses Programm kompilieren wir und führen es mit folgender Syntax in der Konsole aus:

\> java installCert www.meinziel.com [challengingPassphrase]

 

Die Passphrase ist optional. Normalerweise wird diese nicht benötigt, um auf ein Zertifikat zu zugreifen.

Eine Ausgabe ähnlich der folgenden ist das Ergebnis.

Hier sieht man nochmal die Fehler, die einen vor kurzem noch fast in den Wahnsinn getrieben hätten


 

Wir werden gefragt welches Zertifikat wir zu unserem Bund der vertrauten Zertifikate hinzufügen wollen. Die Auswahl fällt leicht, es gibt in diesem Fall nur eins. Also geben wir eine 1 ein und drücken Return.

Das Programm hat in seinem Ausführungsordner eine Datei namens jssecacerts angelegt.

Diese Datei kopieren wir nun in das lib/security/ Verzeichnis unserer jre Installation. In diesem Ordner liegt auch die Datei cacerts. Wollen wir SSL nicht über JSSE sondern über APR nutzen (was hier der Fall ist), müssen wir diese Datei mit der eben kopierten jssecacerts ersetzen. (sprich: cacerts löschen und jssecacerts in cacerts umbenennen ;))

Damit ist das Zertifikat Tomcats Bund der vertrauten Zertifikate hinzugefügt, und wir können eine Webservice Verbindung zu diesem Server über SSL herstellen.
 

Anhang

Fehlersuche

Es kommt bei Entwicklern oftmals vor, das jre und jdk gleichzeitig installiert sind. Sie sollten sich vergewissern, dass Sie die jssecacert Datei ins richtige jre/lib/security Verzeichnis kopieren. Im Zweifelsfall kopieren sie die Datei und überschreiben die cacerts Datei in beiden Ordnern.

In der Regel verwendet Tomcat die eigenständige jre, nicht die im jdk enthaltende. Das ist allerdings auch ein Konfigurationsfrage.

Quellen:

SUN Blog von Andreas Sterbenz, Zertifikate in Bund aufnehmen (Vielen Dank Andreas!):
http://blogs.sun.com/andreas/entry/no_more_unable_to_find
http://blogs.sun.com/andreas/resource/InstallCert.java

APR Doku:
http://tomcat.apache.org/tomcat-6.0-doc/apr.html


 

 

 

Tim Wahrendorff
19.05.2009

< Vista: UAC abschalten, Herunterfahren im Startmenü   LimeSurvey als OneClick Installation  >

Kommentare

#1 Hallo,

relativ weit oben geht es um die anpassung der Server.xml.

Dabei soll man folgendes einfügen / modifizieren:


enableLookups=\"false\" disableUploadTimeout=\"true\" acceptCount=\"100\"
scheme=\"https\" secure=\"true\" SSLEnabled=\"true\"
SSLCertificateFile=\"${catalina.base}/server.crt\"
SSLCertificateKeyFile=\"${catalina.base}/server.key\" /> Dabei ist mir aufgefallen, dass ich zwar die crt File(s) habe und auch weiß wo der Keystore liegt (c:\\.keystore - weil ich ihn so angelegt habe), aber eine .key File habe ich keine. Gibt es eine Möglichkeit die bei der Generierung des Keys mit anzulegen oder wo bekomme ich die her? Danke und Gruß!

Gravatar Phil 03.02.2011 11:31
#2

Boah, das ist ja noch aus meiner Windows Zeit... Gute Frage.

Soweit ich Dir folgen kann, möchtest Du einen Tomcat konfigurieren auf dem ein Webserver läuft. Ich habe damals den Tomcat konfiguriert damit er mit anderen Webservern spricht.

Bedeutet: Bei mir lag die server keyfile schon fertig im xampp, es ging mir nur darum, dass mein Tomcat mit einem anderen Apache über SSL kommuniziert, dafür brauchte ich auf der Tomcat Seite keine server keyfile.

Prinzipiell ist OpenSSH nicht zu verachten um keypairs an zu legen. Die server.key wäre in diesem Fall ein Schlüsselpaar aus public und private key, wenn ich mich nicht irre. Da meine Kenntnise hier doch auch eher sandig sind, kann ich Dir nur Google empfehlen. Sry.

Gravatar Tim 14.06.2011 11:37

Kommentar schreiben

Gravatar Unterstützung

* benötigt


Die E-Mail Adresse wird versteckt und nur genutzt um Dein Gravatar an zu zeigen, wenn Du eins hast.