You are viewing a plain text version of this content. The canonical link for it is here.
Posted to soap-dev@xml.apache.org by Kim Altintop <ki...@deepfx.com> on 2002/01/29 15:06:17 UTC

Another post concerning SSL client cert auth

Hi all,

I'm another poor poster stuck with the problem of setting up SSL client
cert auth with SOAP :-(
I'm using (almost literally) the example code previously posted on this
list by Nathan Wray to set up a custom SSLSocketFactory (see below). When I
run my client app with "-Djavax.net.debug=all" I can see that my
SocketFactory seems to be unable to send it's cert upon request of the
server:

[...]

*** ServerHelloDone
[read] MD5 and SHA1 hashes:  len = 4
0000: 0E 00 00 00                                        ....
*** Certificate chain
***
*** ClientKeyExchange, RSA PreMasterSecret, v3.1

[...]


although I can see from debugging output, that the Certificate chain on the
client side is set up correctly. If I use the same
SSLSocketFactory-initialization-code with the
"SSLSocketWithClientAuth"-example that comes with JSSE, output looks like
the following:

[...]

*** ServerHelloDone
[read] MD5 and SHA1 hashes:  len = 4
0000: 0E 00 00 00                                        ....
matching client alias : kim
*** Certificate chain
chain [0] = [
[
  Version: V1
  Subject: CN=Kim Altintop, OU=SD, O=mbfp, C=DE
  Signature Algorithm: MD5withRSA, OID = 1.2.840.113549.1.1.4

  Key:  com.sun.net.ssl.internal.ssl.JSA_RSAPublicKey@5ee671
  Validity: [From: Fri Jan 25 14:55:44 CET 2002,
               To: Thu Apr 25 15:55:44 CEST 2002]
  Issuer: CN=Kim Altintop, OU=SD, O=mbfp, C=DE
  SerialNumber: [    3c5163e0 ]

]
  Algorithm: [MD5withRSA]
  Signature:
0000: 63 9C 18 51 74 A3 24 0C   27 41 E4 D4 66 6A 97 A2  c..Qt.$.'A..fj..
0010: 95 89 FA A2 14 24 B3 8C   F5 7B D2 A4 DC 64 7E 88  .....$.......d..
0020: 47 3F EF A9 EF 7C 5B E0   AC 7B D1 45 C3 7A AF 1E  G?....[....E.z..
0030: 8A 18 31 B7 9C D9 23 B0   23 B6 79 C0 1F F8 AB 7E  ..1...#.#.y.....
0040: 22 35 81 19 66 E6 71 3A   A3 D2 15 CD D2 60 DF EA  "5..f.q:.....`..
0050: 86 99 85 B1 15 C6 5F 85   B7 C9 E5 CA 48 80 86 D4  ......_.....H...
0060: 80 8E 44 08 C3 BC 0D 30   52 28 5D B0 A1 A6 05 EB  ..D....0R(].....
0070: 27 DE C5 34 68 C1 79 6E   20 1F 98 21 14 00 9C 76  '..4h.yn ..!...v

]
***
*** ClientKeyExchange, RSA PreMasterSecret, v3.1

[...]




So, what's going wrong? As far as I can see, the only difference between
the apps is that I have to use
"HttpsURLConnection.setDefaultSSLSocketFactory()" with the SOAP-client
whereas the JSSE-example is creating the socket directly.

Has anyone run into this before? I would greatly appreciate any hints...

[ for now, as I _CAN_ establish a SSL connection with only server-side cert
auth, I can work with BASIC AUTH as the credentials are encrypted while
travelling over network - but this requires username/password to be
hardcoded or at least stored somewhere on the machine I'm running the
client. And I don't like that... ;-( ]



Best regards,

Kim


-- Here's the code I use in my SOAP client --

[ ... ]

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

	Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
	SSLContext           ctx;
	KeyManagerFactory    kmf;
	TrustManagerFactory  tmf;
	KeyStore             ks;
	char[]               passphrase  = "dirkdiggler".toCharArray();

	ctx = SSLContext.getInstance("TLS");
	kmf = KeyManagerFactory.getInstance("SunX509");
	ks = KeyStore.getInstance("JKS");
	tmf = TrustManagerFactory.getInstance("SunX509");

	ks.load(new FileInputStream("mykeystore"), passphrase);
	kmf.init(ks, passphrase);
	tmf.init(ks);
	ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

	HttpsURLConnection.setDefaultSSLSocketFactory(ctx.getSocketFactory());
 } catch (Exception e) {
		System.out.println("SSLSocketFactory initialization failed");
		e.printStackTrace();
 }

[ ... ]