Я использую весеннюю загрузку версии 1.5.6. ВЫПУСК. Я настроил SSL на порт 9443 декларативно в application.yml. Это работает. Я также использую Undertow для этого приложения Spring-boot.
server:
session:
cookie:
http-only: true
contextPath: /webapp
port: 9443
ssl:
key-store: /etc/pki/mycert.jks
key-store-password: ${SSL_KEYSTORE_PWD}
keyStoreType: JKS
keyAlias: alias
Я настроил дополнительный порт SSL программно. Вот фрагмент кода:
@Configuration
public class UndertowAdditionalSSLConfig
{
@Bean
public UndertowEmbeddedServletContainerFactory embeddedServletContainerFactory()
{
UndertowEmbeddedServletContainerFactory factory = new UndertowEmbeddedServletContainerFactory();
factory.addBuilderCustomizers(new UndertowBuilderCustomizer()
{
@Override
public void customize(Undertow.Builder builder)
{
try
{
builder.addHttpsListener(9444, "0.0.0.0", getSSLContext());
}
catch (Exception e)
{
log.error(e,"Could not add additional listener for https");
}
}
});
return factory;
}
}
Вторичный ssl-порт используется для аутентификации клиента x509 для вызовов REST между серверами. Мне не удалось выяснить, как программно сделать следующее для вторичного порта ssl:
client-auth=need
Проблема, с которой я столкнулся, заключается в том, что клиентский сертификат не отправлен или не принят сервером. Я думаю, что я скучаю по этой части.
Спасибо за любую помощь.
UPDATE
После некоторого поиска источника загрузки Spring. Я нашел это:
builder.setSocketOption(Options.SSL_CLIENT_AUTH_MODE, SslClientAuthMode.REQUIRED);
Я применил изменение к своему коду:
@Override
public void customize(Undertow.Builder builder)
{
try
{
builder.addHttpsListener(8444, "0.0.0.0", getSSLContext());
builder.setSocketOption(Options.SSL_CLIENT_AUTH_MODE, SslClientAuthMode.REQUIRED);
}
catch (Exception e)
{
log.error(e,"Could not add additional listener for https");
}
}
Мне показалось, что у меня есть решение, которое я искал, однако изменение перешло и в SSL на порт 9443, и приложение перестало отвечать на запросы браузера.
Действительно, лучший вопрос для меня:
Как я могу установить SSL на 2 отдельных порта и 1 принять сертификат клиента, чтобы могла выполняться аутентификация на основе клиента.
спасибо