Thanks Julius, Your solution is much easier to work with than the one I put together.
On 5/6/06, Julius Davies <[EMAIL PROTECTED]> wrote:
Hi, Sudip, I think I have a solution. You will need to download the latest version of "commons-ssl.jar" that I am working on. It now includes modified versions of the " org.apache.commons.httpclient.contrib.ssl" classes. http://juliusdavies.ca/commons-ssl/ I've created a TrustExample.java file for you. Try running its main method with the following jars in your classpath: commons-codec.jar commons-httpclient.jar commons-logging.jar commons-ssl.jar It should output the following: HTTPClient: HTTP/1.1 200 OK Java: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: No trusted certificate found Here's are two links to TrustExample.java (the second link uses HTML for syntax highlighting): http://juliusdavies.ca/commons-ssl/TrustExample.java http://juliusdavies.ca/commons-ssl/TrustExample.java.html I hope this helps. Thanks for your help testing the proxy feature of my commons-ssl Ping utility! I'm glad to hear it works! yours, Julius -----Original Message----- From: sudip shrestha [mailto:[EMAIL PROTECTED] Sent: Fri 5/5/2006 7:13 PM To: Julius Davies Cc: Subject: Re: Fwd: SSLHandshakeException with apache+tomcat httpd server It seemed to work ok.... I am sort of wondering how do I attach the my.keystore file with the applet. This was the output: -------------------------------- HEAD / HTTP/1.1 Host: mydomain.com Reading: ================================================================================ HTTP/1.1 302 Moved Temporarily Date: Sat, 06 May 2006 02:05:19 GMT Server: Apache Set-Cookie: JSESSIONID=87BD0090FE9C884140543A2F3662D0EE; Path=/; Secure Location: https://mydomain/actions/checkSession.do;jsessionid=87BD0090FE9C884140543A2F3662D0EE?method=checkSession Content-Type: httpd/unix-directory Server Certificate Chain for: [mydomain.com/ipaddx:443] ================================================================================ s.0: CN=mydomain.com, OU=InstantSSL, OU=IS, O=xxx, STREET=addr, STREET=xxx, L=xx, ST=xx, OID.add=00000-1892, C=US i.0: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE -----BEGIN CERTIFICATE----- [...] -----END CERTIFICATE----- s.1: CN=AddTrust External CA Root, OU=AddTrust External TTP Network, O=AddTrust AB, C=SE i.1: CN=UTN-USERFirst-Hardware, OU=http://www.usertrust.com, O=The USERTRUST Network, L=Salt Lake City, ST=UT, C=US -----BEGIN CERTIFICATE----- MIIETzCCAzegAwIBAgIQHM5EYpUZep1jUvnyI6m2mDANBgkqhkiG9w0BAQUFADCB lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt SGFyZHdhcmUwHhcNMDUwNjA3MDgwOTEwWhcNMTkwNzA5MTgxOTIyWjBvMQswCQYD VQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0 IEV4dGVybmFsIFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5h bCBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt/caM+by AAQtOeBOW+0fvGwPzbX6I7bO3psRM5ekKUx9k5+9SryT7QMa44/P5W1QWtaXKZRa gLBJetsulf24yr83OC0ePpFBrXBWx/BPP+gynnTKyJBU6cZfD3idmkA8Dqxhql4U j56HoWpQ3NeaTq8Fs6ZxlJxxs1BgCscTnTgHhgKo6ahpJhiQq0ywTyOrOk+E2N/O n+Fpb7vXQtdrROTHre5tQV9yWnEIN7N5ZaRZoJQ39wAvDcKSctrQOHLbFKhFxF0q fbe01sTurM0TRLfJK91DACX6YblpalgjEbenM49WdVn1zSnXRrcKK2W200JvFbK4 e/vv6V1T1TRaJwIDAQABo4G9MIG6MB8GA1UdIwQYMBaAFKFyXyYbKJhDlV0HN9WF lp1L0sNFMB0GA1UdDgQWBBStvZh6NLQm9/rEJlTvA73gJMtUGjAOBgNVHQ8BAf8E BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAQIwRAYDVR0f BD0wOzA5oDegNYYzaHR0cDovL2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmly c3QtSGFyZHdhcmUuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQByQhANOs4kClrwF8BW onvUOGCSjRK52zYZgDXYNjDtmr5rJ6NyPFDNn+JxkLpjYetIFMTbSRe679Bt8m7a gIAoQYFQtxMuyLnJegB2aEbQiIxh/tC21UcFF7ktdnDoTlA6w3pLuvunaI84Of3o 2YBrhzkTbCfaYk5JRlTpudW9DkUkHBsyx3nknPKnplkIGaK0jgn8E0n+SFabYaHk I9LroYT/+JtLefh9lgBdAgVv0UPbzoGfuDsrk/Zh+UrgbLFpHoVnElhzbkh64Z0X OGaJunQc68cCZu5HTn/aK7fBGMcVflRCXLVEQpU9PIAdGA8Ynvg684t8GMaKsRl1 jIGZ -----END CERTIFICATE----- On 5/5/06, Julius Davies <[EMAIL PROTECTED]> wrote: > > Hi, Sudip, > > Thanks for your interesting question! I added a "proxy" option to the > "commons-ssl.jar" tool. > > I realize you've already progressed on your problem, but would you mind > testing this option for me? > > Here's the lastest version: > > http://juliusdavies.ca/commons-ssl/ > > In particular: > > http://juliusdavies.ca/commons-ssl/commons-ssl.jar > > > Please try running: > > java -jar commons-ssl.jar -t [mydomain.com]:443 -r [myproxy.com]:80 > > Does it work? > > > > yours, > > Julius > > > ============================================================================== > Usage: java -jar commons-ssl.jar [options] > Options: (*=required) > * -t --target [hostname[:port]] default port=443 > -b --bind [hostname[:port]] default port=0 > "ANY" > -r --proxy [hostname[:port]] default port=80 > -c --client-cert [path to client certificate] *.jks or *.pfx > -p --password [client cert password] > > Example: > > java -jar commons-ssl.jar -t cucbc.com:443 -c ./client.pfx -p `cat > ./pass.txt` > > ============================================================================== > > > On Fri, 2006-05-05 at 15:38 -0500, sudip shrestha wrote: > > I am not sure on how to deploy the my.keystore file with the > applet? Thanks > > for any suggestions. > > > > ---------- Forwarded message ---------- > > From: sudip shrestha <[EMAIL PROTECTED]> > > Date: May 5, 2006 2:08 PM > > Subject: Re: SSLHandshakeException with apache+tomcat httpd server > > To: Julius Davies <[EMAIL PROTECTED]> > > > > Hi, > > OK... This is what I did and fixed my problem: > > 1. I first got my keystore from CA-cert: > > keytool -import -trustcacerts -keystore my.keystore -file > > mydomain.com.crt-alias mydomainkey > > 2. Then added a line before creating new Protocol object with > > StrictSSLProtocolSocketFactory: > > ------------------ > > System.setProperty("javax.net.ssl.trustStore", "my.keystore"); > > > > Protocol stricthttps = new Protocol( "https", new > > StrictSSLProtocolSocketFactory(true), 443); > > httpclient.getHostConfiguration().setHost("mydomain.com", 443, > > stricthttps); > > > > httpclient.executeMethod( httpget ); > > System.out.println( new String( httpget.getResponseBody () ) ); > > > > System.out.println( httpget.getStatusLine() ); > > ------------------ > > Then, I was able to get secure urls normally from mydomain.com. But now > I > > am wondering how do I put my.keystore file in the client machine, as > these > > urls will be accessed by an Applet. > > > > > > > > On 5/5/06, sudip shrestha < [EMAIL PROTECTED]> wrote: > > > > > > Julius, Thanks for your replay. We have a proxy server to go thru... > How > > > do I define a proxy server/port in command line with java -jar > > > commons-ssl.jar -t [ mydomain.com]:443? > > > > > > Because, right now, this is all I get: > > > java.net.SocketTimeoutException: connect timed out > > > at java.net.PlainSocketImpl.socketConnect(Native Method) > > > at java.net.PlainSocketImpl.doConnect (Unknown Source) > > > at java.net.PlainSocketImpl.connectToAddress(Unknown Source) > > > at java.net.PlainSocketImpl.connect(Unknown Source) > > > at java.net.SocksSocketImpl.connect(Unknown Source) > > > at java.net.Socket.connect(Unknown Source) > > > at com.sun.net.ssl.internal.ssl.SSLSocketImpl.connect (Unknown > > > Source) > > > at org.apache.commons.ssl.SSLClient.createSocket( > SSLClient.java > > > :189) > > > at org.apache.commons.ssl.SSLClient.createSocket ( > SSLClient.java > > > :157) > > > at org.apache.commons.ssl.SSLClient.createSocket( > SSLClient.java > > > :149) > > > at org.apache.commons.ssl.Ping.main(Ping.java:136) > > > > > > > > > On 5/5/06, Julius Davies <[EMAIL PROTECTED]> wrote: > > > > > > > > Hi, Sudip, > > > > > > > > I'm working on a tool to help diagnose these kinds of problems. Can > you > > > > try this tool and report back on the output? > > > > > > > > http://juliusdavies.ca/commons-ssl/ > > > > > > > > In particular, download: > > > > > > > > http://juliusdavies.ca/commons-ssl/commons-ssl.jar > > > > > > > > And then run: > > > > > > > > java -jar commons-ssl.jar -t [ mydomain.com]:443 > > > > > > > > (You'll have to replace mydomain.com with the server in particular > that > > > > you are using.) > > > > > > > > yours, > > > > > > > > Julius > > > > > > > > > > > > > > > > -----Original Message----- > > > > From: sudip shrestha [mailto:[EMAIL PROTECTED] > > > > Sent: Fri 5/5/2006 9:20 AM > > > > To: [email protected] > > > > Cc: > > > > Subject: SSLHandshakeException with apache+tomcat httpd > server > > > > > > > > Hi, > > > > I have apache httpd 2.0 server working with Tomcat 5.5.7 that server > > > > dynamic > > > > contents. Only HTTPS requests are allowed by this server. We have > a > > > > trusted certificate from a CA, comodo. I have written an applet that > > > > needs > > > > to talk to this server via ssl. > > > > I have added the cert from the CA to the jdk keystore with: keytool > > > > -import > > > > -file mydomain.com.crt. > > > > > > > > So, when I use this piece of code below to make a connection I get > an > > > > Exception: > > > > > > > > javax.net.ssl.SSLHandshakeException: > > > > sun.security.validator.ValidatorException: PKIX path buil > > > > ding failed: > sun.security.provider.certpath.SunCertPathBuilderException: > > > > unable to find valid > > > > certification path to requested target > > > > at com.sun.net.ssl.internal.ssl.Alerts.getSSLException > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown > > > > Source) > > > > at > > > > com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate (Unknown > > > > Source) > > > > at > com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage > > > > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.Handshaker.processLoop > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.Handshaker.process_record > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord > (Unknown > > > > Source) > > > > at > > > > com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake > > > > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.SSLSocketImpl.writeRecord > > > > (Unknown > > > > Source) > > > > at com.sun.net.ssl.internal.ssl.AppOutputStream.write > (Unknown > > > > Source) > > > > at java.io.BufferedOutputStream.flushBuffer(Unknown Source) > > > > at java.io.BufferedOutputStream.flush(Unknown Source) > > > > at > > > > > org.apache.commons.httpclient.HttpConnection.flushRequestOutputStream > > > > (HttpConnectio > > > > n.java:827) > > > > at org.apache.commons.httpclient.HttpMethodBase.writeRequest( > > > > HttpMethodBase.java:1975) > > > > > > > > at org.apache.commons.httpclient.HttpMethodBase.execute( > > > > HttpMethodBase.java:993) > > > > at > > > > org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry > > > > (HttpMethodDirecto > > > > r.java:397) > > > > at > > > > org.apache.commons.httpclient.HttpMethodDirector.executeMethod( > > > > HttpMethodDirector.j > > > > ava:170) > > > > at org.apache.commons.httpclient.HttpClient.executeMethod( > > > > HttpClient.java:396) > > > > at org.apache.commons.httpclient.HttpClient.executeMethod( > > > > HttpClient.java:324) > > > > at main.main(main.java:54) > > > > Caused by: sun.security.validator.ValidatorException: PKIX path > building > > > > failed: sun.security . > > > > provider.certpath.SunCertPathBuilderException: unable to find valid > > > > certification path to requ > > > > ested target > > > > at sun.security.validator.PKIXValidator.doBuild(Unknown > Source) > > > > at sun.security.validator.PKIXValidator.engineValidate (Unknown > > > > Source) > > > > at sun.security.validator.Validator.validate(Unknown Source) > > > > at > > > > com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted > > > > (Unknown > > > > Source > > > > ) > > > > at > > > > com.sun.net.ssl.internal.ssl.JsseX509TrustManager.checkServerTrusted > (Unknown > > > > Source > > > > ) > > > > ... 18 more > > > > Caused by: > sun.security.provider.certpath.SunCertPathBuilderException: > > > > unable to find valid ce > > > > rtification path to requested target > > > > at > sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown > > > > Source) > > > > at java.security.cert.CertPathBuilder.build(Unknown Source) > > > > ... 23 more > > > > ---------------------------------------------------------------- > > > > Test Code: > > > > --------------- > > > > HttpClient httpclient = new HttpClient(); > > > > GetMethod httpget = new GetMethod("https://mydomain.com/"); > > > > try { > > > > > > > > * //Protocol easyhttps = new Protocol("https", new > > > > EasySSLProtocolSocketFactory(), 443); > > > > //Protocol.registerProtocol("https", easyhttps);* > > > > > > > > httpclient.executeMethod(httpget); > > > > > > > > System.out.println( httpget.getStatusLine() ); > > > > > > > > } catch(Exception e) { > > > > e.printStackTrace (); > > > > } finally { > > > > httpget.releaseConnection(); > > > > } > > > > ---------------------------------------------------------------- > > > > > > > > I have tried this with/without the *EasySSLProtocolSocketFactory and > I > > > > get > > > > the same result. Searched through the archive but could not move > > > > forward. > > > > > > > > In my case, all the SSL requests are handled by apache first, so is > > > > there > > > > something else that I have to do to make it work?... thanks.... > > > > * > > > > > > > > > > > > > > > > > > > > > > > > -- > Julius Davies > Senior Application Developer, Technology Services > Credit Union Central of British Columbia > http://www.cucbc.com/ > Tel: 604-730-6385 > Cel: 604-868-7571 > Fax: 604-737-5910 > > 1441 Creekside Drive > Vancouver, BC > Canada > V6J 4S7 >
