private SSLContext getSslContext() {
SSLContext sslContext = null;
try {
File keyStoreFile = new File(sslKey);// 私钥
File trustStoreFile = new File(sslCert);// 公钥
if (keyStoreFile.exists() && trustStoreFile.exists()) {
final KeyStoreFactory keyStoreFactory = new KeyStoreFactory();
keyStoreFactory.setDataFile(keyStoreFile);
if (StringUtils.isNotBlank(sslKeyPassPhrase)) {
keyStoreFactory.setPassword(sslKeyPassPhrase);
}
final KeyStoreFactory trustStoreFactory = new KeyStoreFactory();
trustStoreFactory.setDataFile(trustStoreFile);
final SslContextFactory sslContextFactory = new SslContextFactory();
final KeyStore keyStore = keyStoreFactory.newInstance();
sslContextFactory.setKeyManagerFactoryKeyStore(keyStore);
final KeyStore trustStore = trustStoreFactory.newInstance();
sslContextFactory.setTrustManagerFactoryKeyStore(trustStore);
sslContext = sslContextFactory.newInstance();
}
} catch (Exception e) {
logger.error(e.getMessage());
}
return sslContext;
}
public static SslContextFactory createDefaultSslFactory ( final Map<String, String> properties, final boolean clientMode ) throws Exception
{
final boolean requireSsl = isSslRequired ( properties );
final File defaultKeyStoreFile = findDefaultKeyStore ();
final String keyStoreFileName = get ( properties, "sslKeyStoreFile", null );
File keyStoreFile = keyStoreFileName != null ? new File ( keyStoreFileName ) : null;
if ( keyStoreFile == null && defaultKeyStoreFile == null && !requireSsl )
{
// no STATS_KEY store provided and no default key store found
// no ssl
return null;
}
if ( keyStoreFile == null && defaultKeyStoreFile != null )
{
// no specific key store file and default key store file exists and is readable
logger.debug ( "Using default key store file: {}", defaultKeyStoreFile );
keyStoreFile = defaultKeyStoreFile;
}
if ( keyStoreFile == null )
{
// no key store to use
return null;
}
final String trustStoreFile = get ( properties, "sslTrustStoreFile", keyStoreFile.getAbsolutePath () );
final String password = get ( properties, "sslPassword", null );
final String keyStorePassword = get ( properties, "sslKeyStorePassword", password );
final String trustStorePassword = get ( properties, "sslTrustStorePassword", keyStorePassword );
final String keyPassword = get ( properties, "sslKeyPassword", keyStorePassword );
if ( ( keyStorePassword == null || trustStorePassword == null || keyPassword == null ) && !requireSsl )
{
// no ssl
return null;
}
final SslContextFactory factory = new SslContextFactory ();
logger.debug ( "Default KeyStore: {}", KeyStore.getDefaultType () );
logger.debug ( "Default KeyManagerFactory: {}", KeyManagerFactory.getDefaultAlgorithm () );
logger.debug ( "Default TrustManagerFactory: {}", TrustManagerFactory.getDefaultAlgorithm () );
final KeyStoreFactory keyStoreFactory = new KeyStoreFactory ();
keyStoreFactory.setDataFile ( keyStoreFile );
keyStoreFactory.setPassword ( keyStorePassword );
final KeyStoreFactory trustStoreFactory = new KeyStoreFactory ();
trustStoreFactory.setDataFile ( new File ( trustStoreFile ) );
trustStoreFactory.setPassword ( trustStorePassword );
factory.setKeyManagerFactoryKeyStore ( keyStoreFactory.newInstance () );
factory.setTrustManagerFactoryKeyStore ( trustStoreFactory.newInstance () );
factory.setKeyManagerFactoryKeyStorePassword ( keyPassword );
return factory;
}