# file download über https mit p12 Zertifikat



## Guest (2. Sep 2005)

Hallo,

ich war die letzten 2 Tage im ganzen Netz unterwegs um eine Lösung für mein Problem zu finden. Gefunden habe ich leider nichts was mich weiter bringt.

Zu meinem Problem:
------------------------

Ziel ist es aus meiner Applikation heraus Dateien über https herunterzuladen. Damit der Download möglich wird ist ein p12 Zertifikat nötig.

Was habe ich bisher getan?
-------------------------------
Mein p12 Zertifikat in ein "Java Format" (JKS) gebracht mit Hilfe der Klasse:
http://sourceforge.net/mailarchive/forum.php?thread_id=2156007&forum_id=33092

Als test habe ich mir dann alle Zertifikate ausgeben lassen mit

```
keytool -list -keystore C:\Programme\Java\jre1.5.0_04\lib\security\cacerts -storepass changeit
```
und siehe da:

matthias(virat), 02.09.2005, keyEntry,
Zertifikatsfingerabdruck (MD5): D7:09:2E:C8:27:E9:AC...........

mein Zertifikat ist da. Deshalb hoffe ich, dass hier nicht der Fehler liegt.

Hier nun der src:


```
package src;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.security.Security;

public class test1 {

	public static void main(String[] args) {
		try {
			// Set the system and security properties
			System.setProperty("javax.net.ssl.trustStore",
					"C:\\Programme\\Java\\jre1.5.0_04\\lib\\security\\cacerts");
			System.setProperty("javax.net.ssl.trustStorePassword", "changeit");
			System.setProperty("javax.net.ssl.keyStoreType", "JKS");
			// Keystore location and password
			System.setProperty("javax.net.ssl.keyStore",
					"C:\\Programme\\Java\\jre1.5.0_04\\lib\\security\\cacerts");
			System.setProperty("javax.net.ssl.keyStorePassword", "changeit");

			System.setProperty("java.protocol.handler.pkgs",
					"com.sun.net.ssl.internal.www.protocol");

			Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());

			// connect to get the web page
			URL url = new URL(
					"https://aHostofMyChoice:8280/urn/urn:dk:statsbiblioteket:commercials:movie-1");
			URLConnection connection = url.openConnection();

			// get the contents of the web page
			InputStream stream = connection.getInputStream();
			BufferedReader reader = new BufferedReader(new InputStreamReader(
					stream));

			// read in the entire web page
			StringBuffer webPage = new StringBuffer();
			// String line = null;

			while (reader.readLine() != null) {
				webPage = webPage.append(reader.readLine());
				System.out.println(reader.readLine());
			}

			// close all resources that we do not need
			// now that the web page has been obtained
			stream.close();
			reader.close();

		} catch (MalformedURLException e) {
			System.out.println("MalformedURLException");
		} catch (IOException e) {
			System.out.println(e.toString());
		}
	}
}
```

und die Exception :-(

```
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
```

Ich habe keine Idee mehr wie ich das noch machen soll, es wäre super wenn einer ein paar Lösungsansätze parat hat.

Ich wäre euch ewig dankbar 

Mfg
Anja


----------



## Gast (2. Sep 2005)

solved the problem, thx


----------



## Guest (2. Sep 2005)

Hallo Anja,
1. du musst unterscheiden zwischen TrustStore und KeyStore.
Den TrustStore verwendet der Client, um die Server-Echtheit zu pruefen.
Der KeyStore wird vom Client verwendet, um ihn zu authentifizieren.

D.h. du musst in der cacert Datei die Zertifikate vom Server drinhaben. Das scheint bei dir nicht der Fall zu sein.

2. Musst musst das PKCS#12 Format nicht unbedingt in JKS umwandeln. Du kannst die PKCS12-Datei auch direkt verwenden, musst dann nur javax.net.ssl.keyStoreType eben auf PKCS12 stetzen.

3. Den Protocol Handler und Provider musst du afaik nicht per Hand setzen.


hth


----------



## Gast (2. Sep 2005)

hm. auch gut ^^


----------



## Guest (3. Sep 2005)

trotzdem vielen dank


----------

