Hallo,
Ich komme mit einer Anfängerfrage ins Forum.^^
Mein Problem:
Ich möchte aus der Anwendung heraus den Inhalt einer bestimmten Webseite über https herunterzuladen. Dafür ist ein bestimmtes p12 Zertifikat nötig, welches mir als .p12-Datei vorliegt.
Was bisher geschah:
Zunächst habe Systemvariablen entsprechend meiner .p12-Datei gesetzt. Dann öffne ich eine URLConnection zur Webseite. Beim Versuch einen InputStream der URLConnection zu öffnen tritt eine SSLHandshakeException auf.
Um ein Zertifikatsfehler auszuschließen habe ich die .p12-Datei in den Firefox importiert. Nach dem Import kann ich die Seite mit Firefox öffnen. Nur meine Java-Anwendung kann das nicht.
Mein Code:
Meine Ausgabe auf der Konsole und die Exception:
Über Hilfe oder Anregungen würde ich mich sehr freuen.
Viele Grüße,
Andreas
Ich komme mit einer Anfängerfrage ins Forum.^^
Mein Problem:
Ich möchte aus der Anwendung heraus den Inhalt einer bestimmten Webseite über https herunterzuladen. Dafür ist ein bestimmtes p12 Zertifikat nötig, welches mir als .p12-Datei vorliegt.
Was bisher geschah:
Zunächst habe Systemvariablen entsprechend meiner .p12-Datei gesetzt. Dann öffne ich eine URLConnection zur Webseite. Beim Versuch einen InputStream der URLConnection zu öffnen tritt eine SSLHandshakeException auf.
Um ein Zertifikatsfehler auszuschließen habe ich die .p12-Datei in den Firefox importiert. Nach dem Import kann ich die Seite mit Firefox öffnen. Nur meine Java-Anwendung kann das nicht.
Mein Code:
Code:
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
public class HttpsReader {
final static String KEYSTORE_FILE = "PfadZurDatei.p12";
final static String PASSWORD = "Passwort";
final static String SERVER_URL = "https://url.de/name";
public static void main (String[] args) {
// trust store
System.setProperty("javax.net.ssl.trustStore", KEYSTORE_FILE);
System.setProperty("javax.net.ssl.trustStorePassword", PASSWORD);
System.setProperty("javax.net.ssl.trustStoreType", "PKCS12");
// key store
System.setProperty("javax.net.ssl.keyStore", KEYSTORE_FILE);
System.setProperty("javax.net.ssl.keyStorePassword", PASSWORD);
System.setProperty("javax.net.ssl.keyStoreType", "PKCS12");
try {
// connection to web page
URL url = new URL( SERVER_URL );
System.out.println("open connection");
URLConnection connection = url.openConnection();
// open input stream for web page download
System.out.println("get stream");
InputStream stream = connection.getInputStream();
System.out.println("create reader");
BufferedReader reader = new BufferedReader(
new InputStreamReader( stream )
);
// read and buffer web page
StringBuffer webPage = new StringBuffer();
String line;
System.out.println("read line by line");
while ( (line=reader.readLine()) != null) {
webPage = webPage.append( line );
System.out.println(line);
}
// close
System.out.println("close.");
reader.close();
stream.close();
}
catch (Exception e) {
e.printStackTrace();
}
}
}
Meine Ausgabe auf der Konsole und die Exception:
Code:
open connection
get stream
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
...
Über Hilfe oder Anregungen würde ich mich sehr freuen.
Viele Grüße,
Andreas