Hallo Leute,
ich verzweifle hier fast an meinem derzeitigen Projekt. Ich muss mich zu einem REST-Server verbinden, der eine Client Authentifizierung mit X509 Zertifikaten vorsieht. Leider habe ich von SSL & solchen Zertifikaten und auch vom Keystore keine Ahnung und habe bis jetzt auch keine Informationen gefunden die mich weitergebracht hätten. Ich möchte gerne auch den HttpClient benutzen, da der mir dieser viel Arbeit abnimmt.
Das erste was ich gefunde habe, war dieser Beispielcode: http://java.sun.com/j2se/1.4.2/docs...ets/client/SSLSocketClientWithClientAuth.java
Ich habe einen neuen KeyStore erstellt und das RootCA als auch das Client Zertifikat in diesen importiert (musste die auch unkonvertieren, weil der KeyStore PEM ja nicht annimmt). Als fehlermeldung bekomme ich nun leider folgendes:
Da dies nicht funktioniert hat, habe ich es mit SSL-Not-Yet-Common versucht.
Da bekomme ich aber auch eine Fehlermeldung bei folgendem Code
Fehlermeldung:
Was mache ich hier falsch? Passwörter etc. stimmen, habe ich mit curl überprüft.
ich verzweifle hier fast an meinem derzeitigen Projekt. Ich muss mich zu einem REST-Server verbinden, der eine Client Authentifizierung mit X509 Zertifikaten vorsieht. Leider habe ich von SSL & solchen Zertifikaten und auch vom Keystore keine Ahnung und habe bis jetzt auch keine Informationen gefunden die mich weitergebracht hätten. Ich möchte gerne auch den HttpClient benutzen, da der mir dieser viel Arbeit abnimmt.
Das erste was ich gefunde habe, war dieser Beispielcode: http://java.sun.com/j2se/1.4.2/docs...ets/client/SSLSocketClientWithClientAuth.java
Ich habe einen neuen KeyStore erstellt und das RootCA als auch das Client Zertifikat in diesen importiert (musste die auch unkonvertieren, weil der KeyStore PEM ja nicht annimmt). Als fehlermeldung bekomme ich nun leider folgendes:
Exception in thread "main" javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:339)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:123)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:147)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:108)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:415)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:641)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:576)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:554)
at ***.SSLNotCommonTest.main(SSLNotCommonTest.java:70)
Da dies nicht funktioniert hat, habe ich es mit SSL-Not-Yet-Common versucht.
Da bekomme ich aber auch eine Fehlermeldung bei folgendem Code
Java:
package ***;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
import org.apache.commons.ssl.KeyMaterial;
import org.apache.commons.ssl.SSLClient;
import org.apache.commons.ssl.TrustMaterial;
import org.apache.http.conn.ssl.SSLSocketFactory;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.conn.scheme.Scheme;
import org.apache.http.impl.client.DefaultHttpClient;
public class SSLNotCommonTest {
public final static void main(String[] args) throws Exception {
DefaultHttpClient httpclient = new DefaultHttpClient();
SSLClient sslclient = new SSLClient();
sslclient.addTrustMaterial(TrustMaterial.TRUST_ALL);
sslclient.addTrustMaterial(new TrustMaterial("***-root-ca.cert.pem"));
KeyMaterial km = new KeyMaterial("***1.cert.pem", "***1.key.pem", "***".toCharArray());
SSLSocketFactory socketFactory = new SSLSocketFactory(km.getKeyStore());
Scheme sch = new Scheme("https", socketFactory, 7923);
httpclient.getConnectionManager().getSchemeRegistry().register(sch);
HttpGet httpget = new HttpGet("https://***");
System.out.println("executing request" + httpget.getRequestLine());
HttpResponse response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();
System.out.println("----------------------------------------");
System.out.println(response.getStatusLine());
if (entity != null) {
System.out.println("Response content length: " + entity.getContentLength());
}
if (entity != null) {
entity.consumeContent();
}
// When HttpClient instance is no longer needed,
// shut down the connection manager to ensure
// immediate deallocation of all system resources
httpclient.getConnectionManager().shutdown();
}
}
Fehlermeldung:
Exception in thread "main" java.security.KeyStoreException: failed to extract any certificates or private keys - maybe bad password?
at org.apache.commons.ssl.KeyStoreBuilder.parse(KeyStoreBuilder.java:443)
at org.apache.commons.ssl.KeyStoreBuilder.build(KeyStoreBuilder.java:118)
at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:179)
at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:170)
at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:74)
at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:124)
at org.apache.commons.ssl.KeyMaterial.<init>(KeyMaterial.java:99)
at ***.SSLNotCommonTest.main(SSLNotCommonTest.java:47)
Was mache ich hier falsch? Passwörter etc. stimmen, habe ich mit curl überprüft.