datenmuell
Grünschnabel
Hallo zusammen,
momentan beschäftige ich mich mit folgender Problemstellung: es läuft ein Apache Server, welcher Dateien bereitstellt. Auf diesen Server soll von einem Client aus zugegriffen werden. Die Authentisierung/Authentifizierung soll mit Hilfe von Zertifikaten in beiderlei Richtung (Server zu Client sowie Client zu Server, "Mutual Authentication") stattfinden.
Ich habe bisher mit Hilfe dieser Anleitung eine CA sowie Zertifikate für Client und Server erstellt.
Wenn ich vom Webbrowser aus auf den Server zugreifen möchte, so funktioniert dies auch problemlos und ich kann Dateien nach erfolgreicher Authentisierung/Authentifizierung auf dem Client empfangen. Zuvor habe ich in den Browser natürlich das Client-Zertifikat, was vom Server gefordert wird, eingetragen und auch das Server-Zertifikat akzeptiert.
Allerdings würde ich gerne eine Verbindung aus einer Java-Applikation heraus zum Server aufbauen. Dazu habe ich bisher versucht, den Jakarta HttpClient zu benutzen, allerdings ohne Erfolg. Ich habe diese Anleitung befolgt und zusätzlich das öffentliche Zertifikat des Servers in den lokalen Keystore des Clients geladen. Das Zertifikat des Clients, welches dem Server ja mitgeteilt werden muss, bezieht der Client durch den Programmcode (liegt im gleichen Verzeichnis wie die jar-Datei). Es wird keinerlei Exception geworfen, nur leider wird auch keine Verbindung aufgebaut.
Habe ich etwas Grundlegendes übersehen oder habt ihr evtl. andere Tipps für mich?
Viele Grüße
datenmuell
momentan beschäftige ich mich mit folgender Problemstellung: es läuft ein Apache Server, welcher Dateien bereitstellt. Auf diesen Server soll von einem Client aus zugegriffen werden. Die Authentisierung/Authentifizierung soll mit Hilfe von Zertifikaten in beiderlei Richtung (Server zu Client sowie Client zu Server, "Mutual Authentication") stattfinden.
Ich habe bisher mit Hilfe dieser Anleitung eine CA sowie Zertifikate für Client und Server erstellt.
Wenn ich vom Webbrowser aus auf den Server zugreifen möchte, so funktioniert dies auch problemlos und ich kann Dateien nach erfolgreicher Authentisierung/Authentifizierung auf dem Client empfangen. Zuvor habe ich in den Browser natürlich das Client-Zertifikat, was vom Server gefordert wird, eingetragen und auch das Server-Zertifikat akzeptiert.
Allerdings würde ich gerne eine Verbindung aus einer Java-Applikation heraus zum Server aufbauen. Dazu habe ich bisher versucht, den Jakarta HttpClient zu benutzen, allerdings ohne Erfolg. Ich habe diese Anleitung befolgt und zusätzlich das öffentliche Zertifikat des Servers in den lokalen Keystore des Clients geladen. Das Zertifikat des Clients, welches dem Server ja mitgeteilt werden muss, bezieht der Client durch den Programmcode (liegt im gleichen Verzeichnis wie die jar-Datei). Es wird keinerlei Exception geworfen, nur leider wird auch keine Verbindung aufgebaut.
Habe ich etwas Grundlegendes übersehen oder habt ihr evtl. andere Tipps für mich?
Viele Grüße
datenmuell
Java:
private SSLSocketFactory getFactory(File pKeyFile, String pKeyPassword) throws ...
{
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509);
KeyStore keyStore = KeyStore.getInstance("PKCS12");
InputStream keyInput = new FileInputStream(pKeyFile);
keyStore.load(keyInput, pKeyPassword.toCharArray());
keyInput.close();
keyManagerFactory.init(keyStore, pKeyPassword.toCharArray());
SSLContext context = SSLContext.getInstance("TLS");
context.init(keyManagerFactory.getKeyManagers(), null, new SecureRandom());
return context.getSocketFactory();
}
...
URL url = new URL("https://192.168.1.2/test.zip");
HttpsURLConnection con = (HttpsURLConnection) url.openConnection();
con.setSSLSocketFactory(getFactory(new File("client-zertifikat.p12"), "secret"));
con.setRequestProperty("Range", "bytes=" + downloaded + "-");
con.connect();
...
stream = con.getInpuStream();
...