Möchte man mit einem Java Webservice auf einen anderen Webservice über eine HTTPS-Verbindung zugreifen (z.B. von einem Jira zu einem Fisheye), dann muss man zunächst das Serverzertifikat im Truststore vom Client installieren.
Solange das Zertifikat nicht installiert ist, meldet der Client:
javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target when trying to open an SSL connection to a host using JSSE
Zur Installation des Zertifikats hat Andreas Sterbenz [1] ein nettes kleines Tool namens "InstallCert" [2] geschrieben, was den Vorgang etwas vereinfacht. Zunächst muss man das Tool herunterladen und kompilieren:
wget http://blogs.sun.com/andreas/resource/InstallCert.java
javac InstallCert.java
Danach wird das Tool ausgeführt und das Zertifikat wird in einen lokalen Truststore installiert:
java InstallCert subversion.meinserver.de
Eine Datei namens "jssecacerts" wird erstellt. Anschließend muss man sein Javaprogramm nur mit einem weiteren Systemproperty mit dem Pfad zum Truststore aufrufen und der Zugriff über HTTPS kann nun erfolgen:
-Djavax.net.ssl.trustStore=/etc/java-config-2/jssecacerts
Verbindung erfolgreich.
[1]
http://blogs.sun.com/andreas/entry/no_more_unable_to_find
[2]
http://blogs.sun.com/andreas/resource/InstallCert.java