Как использовать правильный ключ в .JKS на основе псевдонима? - PullRequest
0 голосов
/ 24 октября 2019

поэтому у меня есть два ключа в one.jks для двух разных CN, двух разных клиентских серверов. Я дал каждому ключу свой псевдоним, но один и тот же пароль.

  public SSLSocketFactory sslSocketFactory(String keyStorePath, String keyStorePassword) throws IOException {
    FileInputStream keyStoreInputStream = null;
    KeyManagerFactory kmf = null;
    try {

        if (!StringUtils.isEmpty(keyStorePath) && !StringUtils.isEmpty(keyStorePassword)) {
            keyStoreInputStream = new FileInputStream(keyStorePath);
            final KeyStore objKeystore = KeyStore.getInstance(MQConstants.SSL_JKS);
            objKeystore.load(keyStoreInputStream, keyStorePassword.toCharArray());
            kmf = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());
            kmf.init(objKeystore, keyStorePassword.toCharArray());
        }
        final SSLContext sslContext = SSLContext.getInstance("TLSv1.2");
        sslContext.init((kmf != null ? kmf.getKeyManagers() : null), null,
                null);
        return sslContext.getSocketFactory();
    } catch (final Exception e) {
        throw new RuntimeException(e);
    } finally {
        if (keyStoreInputStream != null) {
            keyStoreInputStream.close();
        }
    }
}

@Lazy
@Bean("firstSslSocketFactory")
public SSLSocketFactory firstSslSocketFactory() throws IOException {
    final String keyStorePath = System.getProperty(MQConstants.SSL_KEYSTORE_PATH);
    final String keyStorePassword = System.getProperty(MQConstants.SSL_KEYSTORE_PW);
    //final String alias = System.getProperty(MQConstants.ALIAS_1);
    return sslSocketFactory(keyStorePath, keyStorePassword);
}

@Lazy
@Bean("secondSslSocketFactory")
public SSLSocketFactory secondSslSocketFactory() throws IOException {
    final String keyStorePath = System.getProperty(MQConstants.SSL_KEYSTORE_PATH);
    final String keyStorePassword = System.getProperty(MQConstants.SSL_KEYSTORE_PW);
    //final String alias = System.getProperty(MQConstants.ALIAS_2);
    return sslSocketFactory(keyStorePath, keyStorePassword);
}

Будет ли KeyManager автоматически знать, какой ключ использовать? Иначе я подумываю использовать закомментированную переменную Alias ​​и перейти к методу top? Но тогда как бы я выбрал по псевдониму?

Спасибо

...