*/
public SSLSocketFactory createSSLFactory(String provider, String protocol,
String algorithm, String keyStore,
String keyAlias, String trustStore) throws GeneralSecurityException {
// the keyStore is optional.
KeystoreInstance keyInstance = null;
if (keyStore != null) {
keyInstance = getKeystore(keyStore);
if (keyInstance.isKeystoreLocked()) {
throw new KeystoreIsLocked("Keystore '" + keyStore
+ "' is locked; please use the keystore page in the admin console to unlock it");
}
if (keyInstance.isKeyLocked(keyAlias)) {
throw new KeystoreIsLocked("Key '" + keyAlias + "' in keystore '" + keyStore
+ "' is locked; please use the keystore page in the admin console to unlock it");
}
}
KeystoreInstance trustInstance = trustStore == null ? null : getKeystore(trustStore);
if (trustInstance != null && trustInstance.isKeystoreLocked()) {
throw new KeystoreIsLocked("Keystore '" + trustStore
+ "' is locked; please use the keystore page in the admin console to unlock it");
}
// OMG this hurts, but it causes ClassCastExceptions elsewhere unless
// done this way!
try {
/*
Class cls = loader.loadClass("javax.net.ssl.SSLContext");
Object ctx = cls.getMethod("getInstance", new Class[] { String.class }).invoke(null,
new Object[] { protocol });
Class kmc = loader.loadClass("[Ljavax.net.ssl.KeyManager;");
Class tmc = loader.loadClass("[Ljavax.net.ssl.TrustManager;");
Class src = loader.loadClass("java.security.SecureRandom");
cls.getMethod("init", new Class[] { kmc, tmc, src }).invoke(
ctx,
new Object[] { keyInstance == null ? null : keyInstance.getKeyManager(algorithm, keyAlias),
trustInstance == null ? null : trustInstance.getTrustManager(algorithm),
new java.security.SecureRandom() });
Object result = cls.getMethod("getSocketFactory", new Class[0]).invoke(ctx, new Object[0]);
return (SSLSocketFactory) result;
*/
SSLContext context;
if (provider == null) {
context = SSLContext.getInstance(protocol);
} else {
context = SSLContext.getInstance(protocol, provider);
}
context.init(keyInstance == null ? null : keyInstance.getKeyManager(algorithm, keyAlias),
trustInstance == null ? null : trustInstance.getTrustManager(algorithm),
new SecureRandom());
return context.getSocketFactory();
} catch (Exception e) {
LOGGER.error("Unable to dynamically load", e);
return null;