Hello all,

I'm having some problems getting this working.  First off, I've got the Tomcat 
server configured for https traffic and it appears to be working fine from the 
tests that I've done via a browser.  

The problem I'm having is configuring the Java client to use an untrusted 
certificate.  I want my application to work just like a web browser when an 
untrusted certificate is sent from the server.  I want to show the certificate 
info to the user and ask if they want to continue or not.  I'll also allow them 
to add the key to their keystore for future use, so they won't be prompted 
again.  

I've got this sort of working with some sample code, but not using SOAP.  My 
sample code tries to read a line from a web page that I know will be there.  
Like this:

URL verisign = new URL("https://"; + server + "/index.html");
BufferedReader in = new BufferedReader(         
        new InputStreamReader(verisign.openStream()));

String inputLine;                       
while ((inputLine = in.readLine()) != null)
        System.out.println(inputLine);

in.close();     

If it gets a SSLHandshakeException, it prompts the user to add the certificate 
or cancel.  If the user adds the certificate, the code adds the certificate to 
the keystore and then tries to read the line again.  Here is a sample of my 
code.

KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
keyStore.load(null, null);
// MyDummyTrustManager prompts user if base class validation fails.
TrustManager[] myTM = new TrustManager [] { new MyDummyTrustManager(keyStore) };
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, myTM, null);
SSLSocketFactory ssf = sc.getSocketFactory();
HttpsURLConnection.setDefaultSSLSocketFactory(ssf);
// MyHostnameVerifier prompts user if validation fails.         
HttpsURLConnection.setDefaultHostnameVerifier(new MyHostNameVerifier());

When I run this code and then construct a Call object and invoke it, I get a 
SSLHandshakeException.  Why doesn't the Call object use the same 
DefaultSSLSocketFactory on the HttpsURLConnection object?

Also, does anybody have an example of how to grab the default keystore without 
asking the user to specify it?  I want to have the Java app "just work" without 
a lot of knowledge on the users part.

Finally, is there a simpler way to do what I'm trying to do?  I just want to 
make calls across soap using SSL.  My code must allow the user to accept a 
server's certificate from the gui like a browser does if certificate 
authentication fails.  I figured this would be built into java as a common 
dialog, since I saw it pop up once when an applet accessed a web server 
encrypted with SSL.  

Any example code would be greatly appreciated.

Thanks in advance for any help,
-- Trey


___________________________________________________________________
Try Juno Platinum for Free! Then, only $9.95/month!
Unlimited Internet Access with 250MB of Email Storage.
Visit http://www.juno.com/value to sign up today!

Reply via email to