#java #ssl #keystore #tomcat9
Вопрос:
Есть ли способ в Apache Tomcat 9 (Java) прочитать хранилище ключей для шифрования SSL из переменной, то есть без необходимости сохранять хранилище ключей в файл, а затем указывать путь к файлу как свойство?
На данный момент я передаю хранилище ключей в Apache, как следующий код:
Connector connector = new Connector();
connector.setScheme("https");
connector.setProperty("keyAlias", "alias-test");
connector.setProperty("keystorePass", "testpwd");
connector.setProperty("keystoreType", "PKCS12");
connector.setProperty("keystoreFile", "keystore.pfx");
Ответ №1:
Чтобы использовать уже настроенный KeyStore
, вам необходимо использовать соответствующие методы настройки, которые, начиная с Tomcat 8.5, являются:
SSLHostConfig#setTrustStore
для доверенных сертификатов,SSLHostConfigCertificate#setCertificateKeyStore
для хранилища ключей, содержащего сертификат сервера.
Это подводит итог чему — то вроде этого:
final KeyStore trustStore = ...
final KeyStore keyStore = ...
// Certificate
final SSLHostConfigCertificate certificate = new SSLHostConfigCertificate();
certificate.setCertificateKeystore(keyStore);
certificate.setCertificateKeyAlias("mykey");
certificate.setCertificateKeyPassword("secret");
// Host SSL configuration
final SSLHostConfig sslHostConfig = new SSLHostConfig();
sslHostConfig.setTrustStore(trustStore);
sslHostConfig.addCertificate(certificate);
// Connector
final Connector connector = new Connector();
connector.setScheme("https");
connector.setSecure(true);
connector.addSslHostConfig(sslHostConfig);
connector.setProperty("SSLEnabled", "true");