public class SSLFactoryBuilder
extends org.apache.avalon.framework.logger.AbstractLogEnabled
implements org.apache.avalon.framework.configuration.Configurable, org.apache.avalon.framework.context.Contextualizable, org.apache.avalon.framework.activity.Disposable, org.apache.avalon.framework.activity.Initializable
Configuration looks like:
<ssl-factory>
<keystore>
<file>conf/keystore</file> <!-- keystore file location -->
<password></password> <!-- Key Store file password, only used to check keystore integrity -->
<key-password></key-password> <!-- Only required when you need to decrypt a private key -->
<type>JKS</type> <!-- Key Store file format, defaults to JKS -->
<algorithm>SunX509</algorithm> <!-- Cryptography provider ID, defaults to SunX509 -->
</keystore>
<!-- SSL protocol to use, defaults to TLS, another possible value is SSL -->
<protocol>TLS</protocol>
</ssl-factory>
Notes on keystore files. Absolute paths are supported. Relative paths are interpreted relative to .sar base directory. Defaults to conf/keystore. Since keystore usually contains sensitive keys it maybe beneficial to not include the keystores into the .sar files.
| Modifier and Type | Field and Description |
|---|---|
private java.io.File |
m_baseDirectory |
private javax.net.ssl.SSLContext |
m_ctx |
private java.lang.String |
m_keyPassword |
private java.io.File |
m_keystoreFile |
private java.lang.String |
m_keystoreFormat |
private java.lang.String |
m_keystorePassword |
private java.lang.String |
m_protocol |
private java.lang.String |
m_provider |
| Constructor and Description |
|---|
SSLFactoryBuilder() |
| Modifier and Type | Method and Description |
|---|---|
javax.net.ssl.SSLServerSocketFactory |
buildServerSocketFactory()
Produces a fresh ssl server socket factory with configured
parameters.
|
javax.net.ssl.SSLSocketFactory |
buildSocketFactory()
Produces a fresh ssl socket factory with configured parameters.
|
void |
configure(org.apache.avalon.framework.configuration.Configuration configuration) |
void |
contextualize(org.apache.avalon.framework.context.Context context)
Requires a BlockContext.
|
void |
dispose() |
void |
initialize() |
private static java.security.KeyStore |
loadKeystore(java.io.InputStream keyStream,
java.lang.String passphrase,
java.lang.String keystoreFormat)
Builds a keystore loaded from the given stream.
|
private static javax.net.ssl.SSLContext |
makeContext(java.io.InputStream keyStream,
java.lang.String keystorePassword,
java.lang.String keyPassword,
java.lang.String protocol,
java.lang.String provider,
java.lang.String keystoreFormat)
Creates an SSL context which uses the keys and certificates
provided by the given keyStream.
|
private java.io.File m_baseDirectory
private java.io.File m_keystoreFile
private java.lang.String m_keystorePassword
private java.lang.String m_keyPassword
private java.lang.String m_protocol
private java.lang.String m_provider
private java.lang.String m_keystoreFormat
private javax.net.ssl.SSLContext m_ctx
public void contextualize(org.apache.avalon.framework.context.Context context)
throws org.apache.avalon.framework.context.ContextException
contextualize in interface org.apache.avalon.framework.context.Contextualizableorg.apache.avalon.framework.context.ContextExceptionpublic void configure(org.apache.avalon.framework.configuration.Configuration configuration)
throws org.apache.avalon.framework.configuration.ConfigurationException
configure in interface org.apache.avalon.framework.configuration.Configurableorg.apache.avalon.framework.configuration.ConfigurationExceptionpublic javax.net.ssl.SSLSocketFactory buildSocketFactory()
public javax.net.ssl.SSLServerSocketFactory buildServerSocketFactory()
public void initialize()
throws java.io.IOException,
java.security.GeneralSecurityException
initialize in interface org.apache.avalon.framework.activity.Initializablejava.io.IOExceptionjava.security.GeneralSecurityExceptionpublic void dispose()
dispose in interface org.apache.avalon.framework.activity.Disposableprivate static javax.net.ssl.SSLContext makeContext(java.io.InputStream keyStream,
java.lang.String keystorePassword,
java.lang.String keyPassword,
java.lang.String protocol,
java.lang.String provider,
java.lang.String keystoreFormat)
throws java.io.IOException,
java.security.GeneralSecurityException
keyStream - to read the keys fromkeystorePassword - password for the keystore, can be null
if integrity verification is not desiredkeyPassword - passphrase which unlocks the keys in the key file
(should really be a char[] so that it can be cleaned after use)protocol - the standard name of the requested protocolprovider - the standard name of the requested algorithmkeystoreFormat - the type of keystorejava.io.IOException - if files can't be readjava.security.GeneralSecurityException - is something goes wrong inside
cryptography frameworkprivate static java.security.KeyStore loadKeystore(java.io.InputStream keyStream,
java.lang.String passphrase,
java.lang.String keystoreFormat)
throws java.security.GeneralSecurityException,
java.io.IOException
keyStream - to load frompassphrase - for the store integrity verification (or null if
integrity check is not wanted)keystoreFormat - the type of keystorejava.io.IOException - if file can not be readjava.security.GeneralSecurityException - if key store can't be built