Hallo allerseits,
ich sende einen Request an einen Webserver, dem ich irgendwelche Strings übergebe. Das funktioniert auch. Jetzt ist das Problem, das auf dem Produktionsserver eine Zertifikatauthentifizierung erfolgen muss. Das Zertifikat habe ich bereits in den Keystore importiert. Ich verstehe die ganze Vorgehensweise ehrlichgesagt nicht
Hier der Code (Auszug):
Wenn ich das ganze ausführe, kommt bei connection.connect() folgende Fehlermeldung:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Das kann eigentlich nicht sein, denn er findet das Zerttifikat ja, oder verstehe ich die Meldung falsch ???
Könnte mir da bitte jemand helfen ???
Viele Grüße
Steffen
ich sende einen Request an einen Webserver, dem ich irgendwelche Strings übergebe. Das funktioniert auch. Jetzt ist das Problem, das auf dem Produktionsserver eine Zertifikatauthentifizierung erfolgen muss. Das Zertifikat habe ich bereits in den Keystore importiert. Ich verstehe die ganze Vorgehensweise ehrlichgesagt nicht
Java:
final String _url = Url;
URL endpoint;
endpoint = new URL(new URL(_url),
"",
//Handler für die Connection und die Connectioneigenschaften
new URLStreamHandler()
{
@Override
protected URLConnection openConnection(URL url) throws IOException
{
try
{
URL zielAdresse = new URL(url.toString());
URLConnection connection = zielAdresse.openConnection();
//Zertifikat einlesen und dem Request hinzufügen
KeyStore ks = KeyStore.getInstance("JKS");
FileInputStream fis = new FileInputStream("Pfad zur Datei");
ks.load(fis, _certPasswort.toCharArray());
//In key sehe ich das Zertifikat. Es wird also gefunden
Key key = ks.getKey("testzert", "changeit".toCharArray());
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, _certPasswort.toCharArray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
tmf.init(ks);
X509TrustManager defaultTrustManager = (X509TrustManager)tmf.getTrustManagers()[0];
SSLContext sc = SSLContext.getInstance("TLS");
//sc.init(kmf.getKeyManagers(), null, null);
sc.init(null, new TrustManager[] {defaultTrustManager}, null);
SSLSocketFactory sslSocketFactory = sc.getSocketFactory();
((HttpsURLConnection) connection).setSSLSocketFactory(sslSocketFactory);
connection.connect();
return(connection);
Wenn ich das ganze ausführe, kommt bei connection.connect() folgende Fehlermeldung:
PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
Das kann eigentlich nicht sein, denn er findet das Zerttifikat ja, oder verstehe ich die Meldung falsch ???
Könnte mir da bitte jemand helfen ???
Viele Grüße
Steffen