I have been trying for quite a wile to get the AuthSSLProtocolSocketFactory
to send a client certificate and it doesn't seem to be working. I am
wondering if the server (Oracle single sign-on server) is requesting the
client cert. When the request is made from a browser, the browser does send
the client cert. I have attached, my application, it is relatively simple
and a debug log. The debug options I used were -
javax.net.debug=ssl,handshake,keymanager.
I have looked at the debug log and I do not see a certificate request.
However, when IE is used, IE sends a client certificate.
Any help would be appreciated.
Thanks,
Dale McIntosh
/*
* Created on Aug 26, 2004
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package testpackage
import java.io.*;
import java.net.*;
import org.apache.commons.httpclient.protocol.*;
import org.apache.commons.httpclient.*;
//import org.apache.commons.httpclient.auth.HttpAuthRealm;
import org.apache.commons.httpclient.methods.*;
import org.apache.commons.httpclient.contrib.ssl.*;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* @author dmcintosh
*
* TODO To change the template for this generated type comment go to
* Window - Preferences - Java - Code Style - Code Templates
*/
public class LoadEventData {
private static final Log LOG = LogFactory.getLog(LoadEventData.class);
private String keyStorePath = ;
private String trustStorePath = ;
private String keyStorePassword = ;
public LoadEventData(String targetURL, String path, int pauseInterval, String userName, String keyStorePath, String keyStorePassword)
{
this(targetURL, path, pauseInterval, userName, keyStorePath, keyStorePath, keyStorePassword);
}
public LoadEventData(String targetURL, String path, int pauseInterval, String userName, String trustStorePath, String keyStorePath, String keyStorePassword)
{
this.keyStorePath = keyStorePath;
this.trustStorePath = trustStorePath != null ? trustStorePath : keyStorePath;
this.keyStorePassword = keyStorePassword;
initSocket(targetURL, path, pauseInterval, userName);
}
public void initSocket(String targetURL, String path, int pauseInterval, String userName)
{
File dir = new File(path);
if (dir.isDirectory())
{
do
{
File[] fileList = dir.listFiles();
for (int i = 0; i fileList.length; i++)
{
File evtFile = fileList[i];
String evtFileName = evtFile.getName();
if (evtFileName.toLowerCase().equals(quit.txt))
{
evtFile.delete();
System.exit(0);
}
if (evtFileName.lastIndexOf(.xml) == evtFileName.length() - 4)
{
if (loadEventDataFile(targetURL, userName, evtFile) = 0) System.out.println(File + evtFileName + sent to server);
else System.out.println(File + evtFileName + not processed - processing error);
evtFile.delete();
}
else System.out.println(File + evtFileName + not processed - bad type);
}
try
{
if (pauseInterval 0) Thread.sleep(pauseInterval * 1000);
}
catch (InterruptedException e) {};
} while (pauseInterval = 0);
}
}
public int loadEventDataFile(String targetURL, String userName, File evtFile)
{
HttpConnection connection = null;
HttpConnectionManager connectionManager = new SimpleHttpConnectionManager();
int status = 0;
try
{
LOG.debug(Here is a logging test);
String finalURL = targetURL + ?user= + userName;
MultipartPostMethod filePost = new MultipartPostMethod(finalURL);
filePost.addParameter(event, evtFile);
HttpClient client = new HttpClient();
URL url = new URL(targetURL);
HttpState state = new HttpState();
String host = url.getHost();
int port = url.getPort();
System.out.println(Host = + host + , + , Port = + port );
if (targetURL.trim().indexOf(https://;) == 0)
{
port = 443;
Protocol authhttps = new Protocol(https,
(ProtocolSocketFactory) new AuthSSLProtocolSocketFactory(
new URL(file: + keyStorePath), keyStorePassword,
new URL(file: + trustStorePath), keyStorePassword), 443);
Protocol.registerProtocol(https, authhttps);
client.getHostConfiguration().setHost(host, port, authhttps);
GetMethod fileGet = new GetMethod(finalURL);
status = client.executeMethod(fileGet);
String responseString = fileGet.getResponseBodyAsString();
if (responseString != null responseString.length() 0) System.out.println(Response String : +