Hello everybody,

   I am working on SSL communication now, I have set up Tomcat to
support SSL, but I got an error when I tried to make a connection to
Tomcat-SSL server. My procedures are as follows: (by the way my server
and client are sitting in the same Linux PC  (Lisbon))


       1. create the key pair for server and client
        2. request the certificates from thawte from both of them
       3. import the reply certifcates to server and client keystores
       4 export the server and client certficates and import them as the

trusted certficates

Detailed procedures, please see the end of the mail

when I desable clientAuth, everything is fine, but when I turn on the
clientAuth, the following erros come up.


In server side:


SecureServer is listening on port 8444.
Accepted connection to 192.168.0.60 (192.168.0.60) on port 40342.
IOException occurred when processing request.
javax.net.ssl.SSLException: null cert chain
 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.ServerHandshaker.a([DashoPro-V1.2-120198])
 at
com.sun.net.ssl.internal.ssl.ServerHandshaker.processMessage([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.Handshaker.process_record([DashoPro-V1.2-120198])

 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.AppInputStream.read([DashoPro-V1.2-120198])

 at java.io.FilterInputStream.read(FilterInputStream.java:69)
 at HTTPInputStream.readLine(HTTPServer.java:150)
 at HTTPInputStream.getRequest(HTTPServer.java:167)
 at HTTPServerThread.run(HTTPServer.java:71)




in client side:

[write] MD5 and SHA1 hashes:  len = 16
0000: 14 00 00 0C D5 E8 10 77   94 5F 1A 5C 3E 6F 94 DF
.......w._.\>o..
Plaintext before ENCRYPTION:  len = 36
0000: 14 00 00 0C D5 E8 10 77   94 5F 1A 5C 3E 6F 94 DF
.......w._.\>o..
0010: E8 04 1B 46 74 29 F0 17   FF A8 B2 D3 28 FA 7B E7
...Ft)......(...
0020: A1 01 87 D4                                        ....
main, WRITE:  SSL v3.1 Handshake, length = 36
Exception in thread "main" java.io.IOException: Broken pipe
 at java.net.SocketOutputStream.socketWrite(Native Method)
 at java.net.SocketOutputStream.write(SocketOutputStream.java:83)
 at com.sun.net.ssl.internal.ssl.OutputRecord.a([DashoPro-V1.2-120198])
 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.HandshakeOutStream.flush([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.Handshaker.sendChangeCipherSpec([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.ClientHandshaker.e([DashoPro-V1.2-120198])
 at
com.sun.net.ssl.internal.ssl.ClientHandshaker.a([DashoPro-V1.2-120198])
 at
com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.Handshaker.process_record([DashoPro-V1.2-120198])

 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at com.sun.net.ssl.internal.ssl.SSLSocketImpl.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.ssl.AppOutputStream.write([DashoPro-V1.2-120198])

 at java.io.OutputStream.write(OutputStream.java:61)
 at
com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsClient.doConnect([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.NetworkClient.openServer([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpClient.l([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpClient.<init>([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsClient.<init>([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsClient.a([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.connect([DashoPro-V1.2-120198])

 at
com.sun.net.ssl.internal.www.protocol.https.HttpsURLConnection.getInputStream([DashoPro-V1.2-120198])

 at Browser.run(Browser.java:36)



Any help is appreciated!!

thanks
Hai





Key generation procedures shown as follows:



Step1 : generate key pairs for server and clients:

  1.       keytool -genkey -v -alias tomcat -keyalg RSA -keysize 1024 -
     sigalg MD5withRSA -keypass changeit -storepass changeit -storetype
     jks -keystore server.keystore

What is your first and last name?
  [Unknown]:  lisbon.invisiblehand.net
What is the name of your organizational unit?
  [Unknown]:  IHN
What is the name of your organization?
  [Unknown]:  IHN
What is the name of your City or Locality?
  [Unknown]:  New York
What is the name of your State or Province?
  [Unknown]:  NY
What is the two-letter country code for this unit?
  [Unknown]:  US
Is <CN=lisbon.invisiblehand.net, OU=IHN, O=IHN, L=New York, ST=NY, C=US>

correct?
  [no]:  y

Generating 1024 bit RSA key pair and self-signed certificate
(MD5withRSA)
 for: CN=lisbon.invisiblehand.net, OU=IHN, O=IHN, L=New York, ST=NY,
C=US
[Saving server.keystore]



  1.     keytool -genkey -v -alias tomcat -keyalg RSA -keysize 1024
     -sigalg MD5withRSA -keypass changeit -storepass changeit
     -storetype  jks -keystore server.keystore client.keystore

What is your first and last name?
  [Unknown]:  lisbon.invisiblehand.net
What is the name of your organizational unit?
  [Unknown]:  ihn
What is the name of your organization?
  [Unknown]:  ihn
What is the name of your City or Locality?
  [Unknown]:  new york
What is the name of your State or Province?
  [Unknown]:  ny
What is the two-letter country code for this unit?
  [Unknown]:  us
Is <CN=lisbon.invisiblehand.net, OU=ihn, O=ihn, L=new york, ST=ny, C=us>

correct?
  [no]:  y

Generating 1024 bit RSA key pair and self-signed certificate
(MD5withRSA)
 for: CN=lisbon.invisiblehand.net, OU=ihn, O=ihn, L=new york, ST=ny,
C=us
[Saving client.keystore]

Step 2: and then  I generate a certifcate requests for both keys pairs




  1.     keytool -certreq -v -alias tomcat -sigalg MD5withRSA -file
     server.csr -keypass changeit -keystore server.keystore -storepass
     changeit -storetype jks

Certification request stored in file <server.csr>
Submit this to your CA



  1.      keytool -certreq -v -alias tomcat -sigalg MD5withRSA -file
     client.csr -keypass changeit -keystore client.keystore -storepass
     changeit -storetype jks

Certification request stored in file <client.csr>
Submit this to your CA



Step3: After these procedures, say I got two certificates from
Kwww.thawte.com/cgi/server/test.exe and root certifcate, i.e.,
clientreply.cer, serverreply.cer and root.cer

import the reply certificates and root certifcate as the trusted
certificate into both server and client keystores


  1.    keytool -import -v -trustcacerts -file server.cer -storepass
     changeit   -keystore server.keystore

Owner: CN=lisbon.invisiblehand.net, OU=IHN, O=IHN, L=New York, ST=NY,
C=US
Issuer: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Serial number: 303d08
Valid from: Fri Nov 16 12:13:45 EST 2001 until: Fri Dec 07 12:13:45 EST
2001
Certificate fingerprints:
  MD5:  83:68:C7:0C:C6:62:50:D7:B6:74:0D:F6:FF:17:51:43
  SHA1: 37:31:EC:11:A7:A6:D0:7D:72:F8:6B:EC:EE:35:39:FA:09:25:29:D7
Trust this certificate? [no]:  y
Certificate was added to keystore
[Saving server.keystore]


  1.     keytool  -import -v -trustcacerts -storepass changeit -file
     clientreply.cer -keystore client.keystore

Owner: CN=lisbon.invisiblehand.net, OU=ihn, O=ihn, L=new york, ST=ny,
C=us
Issuer: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Serial number: 52fdfa
Valid from: Fri Nov 16 12:14:44 EST 2001 until: Fri Dec 07 12:14:44 EST
2001
Certificate fingerprints:
  MD5:  46:C2:22:05:22:B2:45:83:47:35:9F:EE:53:A6:5E:8D
  SHA1: 16:F2:1D:8C:F1:FC:50:43:F4:89:02:85:83:06:7E:EF:ED:AA:2F:AD
Trust this certificate? [no]:  y
Certificate was added to keystore
[Saving client.keystore]


Sterp 4: and then import root certificate for both of them


  1. keytool -import -alias root -file root.cer -keystore
     server.keystore

Enter keystore password:  changeit
Owner: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Issuer: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Serial number: 0
Valid from: Wed Jul 31 20:00:00 EDT 1996 until: Thu Dec 31 16:59:59 EST
2020
Certificate fingerprints:
  MD5:  5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4
  SHA1: 39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA
Trust this certificate? [no]:  y
Certificate was added to keystore



  1.     keytool -import -alias root -file  root.cer -keystore
     client.keystore

Enter keystore password:  changeit
Owner: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Issuer: CN=Thawte Test CA Root, OU=TEST TEST TEST, O=Thawte
Certification, ST=FOR TESTING PURPOSES ONLY, C=ZA
Serial number: 0
Valid from: Wed Jul 31 20:00:00 EDT 1996 until: Thu Dec 31 16:59:59 EST
2020
Certificate fingerprints:
  MD5:  5E:E0:0E:1D:17:B7:CA:A5:7D:36:D6:02:DF:4D:26:A4
  SHA1: 39:C6:9D:27:AF:DC:EB:47:D6:33:36:6A:B2:05:F1:47:A9:B4:DA:EA
Trust this certificate? [no]:  y
Certificate was added to keystore

Step5: then I export the certificates  to each  other

 keytool -export -alias tomcat -file server.cer -keystore
server.keystore

Enter keystore password:  changeit
Certificate stored in file <server.cer>

keytool -export -alias  tomcat -file client.cer -keystore
client.keystore
Enter keystore password:  changeit

Certificate stored in file <client.cer>


Step 6: import the exported certficate to eacch other as trusted
certifcate


  1.  keytool -import -v  -trustcacert -alias client -file client.cer
     -keystore server.keystore

  1.  keytool -import -v -trustcacerts -alias server -file server.cer
     -keystore client.keystore




--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to