Do not set Tomcat's key store and key pass when null
Fixes gh-24041
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Copyright 2012-2019 the original author or authors.
|
* Copyright 2012-2020 the original author or authors.
|
||||||
*
|
*
|
||||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
* you may not use this file except in compliance with the License.
|
* you may not use this file except in compliance with the License.
|
||||||
@@ -69,8 +69,12 @@ class SslConnectorCustomizer implements TomcatConnectorCustomizer {
|
|||||||
protocol.setSSLEnabled(true);
|
protocol.setSSLEnabled(true);
|
||||||
protocol.setSslProtocol(ssl.getProtocol());
|
protocol.setSslProtocol(ssl.getProtocol());
|
||||||
configureSslClientAuth(protocol, ssl);
|
configureSslClientAuth(protocol, ssl);
|
||||||
protocol.setKeystorePass(ssl.getKeyStorePassword());
|
if (ssl.getKeyStorePassword() != null) {
|
||||||
protocol.setKeyPass(ssl.getKeyPassword());
|
protocol.setKeystorePass(ssl.getKeyStorePassword());
|
||||||
|
}
|
||||||
|
if (ssl.getKeyPassword() != null) {
|
||||||
|
protocol.setKeyPass(ssl.getKeyPassword());
|
||||||
|
}
|
||||||
protocol.setKeyAlias(ssl.getKeyAlias());
|
protocol.setKeyAlias(ssl.getKeyAlias());
|
||||||
String ciphers = StringUtils.arrayToCommaDelimitedString(ssl.getCiphers());
|
String ciphers = StringUtils.arrayToCommaDelimitedString(ssl.getCiphers());
|
||||||
if (StringUtils.hasText(ciphers)) {
|
if (StringUtils.hasText(ciphers)) {
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ import org.apache.catalina.LifecycleState;
|
|||||||
import org.apache.catalina.connector.Connector;
|
import org.apache.catalina.connector.Connector;
|
||||||
import org.apache.catalina.startup.Tomcat;
|
import org.apache.catalina.startup.Tomcat;
|
||||||
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
|
import org.apache.catalina.webresources.TomcatURLStreamHandlerFactory;
|
||||||
|
import org.apache.coyote.http11.Http11NioProtocol;
|
||||||
import org.apache.tomcat.util.net.SSLHostConfig;
|
import org.apache.tomcat.util.net.SSLHostConfig;
|
||||||
import org.junit.jupiter.api.AfterEach;
|
import org.junit.jupiter.api.AfterEach;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
@@ -185,6 +186,26 @@ class SslConnectorCustomizerTests {
|
|||||||
.withMessageContaining("Could not load key store 'null'");
|
.withMessageContaining("Could not load key store 'null'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void keyStorePasswordIsNotSetWhenNull() {
|
||||||
|
Http11NioProtocol protocol = (Http11NioProtocol) this.tomcat.getConnector().getProtocolHandler();
|
||||||
|
protocol.setKeystorePass("password");
|
||||||
|
Ssl ssl = new Ssl();
|
||||||
|
ssl.setKeyStore("src/test/resources/test.jks");
|
||||||
|
new SslConnectorCustomizer(ssl, null).customize(this.tomcat.getConnector());
|
||||||
|
assertThat(protocol.getKeystorePass()).isEqualTo("password");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void keyPasswordIsNotSetWhenNull() {
|
||||||
|
Http11NioProtocol protocol = (Http11NioProtocol) this.tomcat.getConnector().getProtocolHandler();
|
||||||
|
protocol.setKeyPass("password");
|
||||||
|
Ssl ssl = new Ssl();
|
||||||
|
ssl.setKeyStore("src/test/resources/test.jks");
|
||||||
|
new SslConnectorCustomizer(ssl, null).customize(this.tomcat.getConnector());
|
||||||
|
assertThat(protocol.getKeyPass()).isEqualTo("password");
|
||||||
|
}
|
||||||
|
|
||||||
private KeyStore loadStore() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
|
private KeyStore loadStore() throws KeyStoreException, IOException, NoSuchAlgorithmException, CertificateException {
|
||||||
KeyStore keyStore = KeyStore.getInstance("JKS");
|
KeyStore keyStore = KeyStore.getInstance("JKS");
|
||||||
Resource resource = new ClassPathResource("test.jks");
|
Resource resource = new ClassPathResource("test.jks");
|
||||||
|
|||||||
@@ -123,6 +123,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
Ssl ssl = new Ssl();
|
Ssl ssl = new Ssl();
|
||||||
ssl.setKeyStore(keyStore);
|
ssl.setKeyStore(keyStore);
|
||||||
ssl.setKeyPassword(keyPassword);
|
ssl.setKeyPassword(keyPassword);
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
factory.setSsl(ssl);
|
factory.setSsl(ssl);
|
||||||
this.webServer = factory.getWebServer(new EchoHandler());
|
this.webServer = factory.getWebServer(new EchoHandler());
|
||||||
this.webServer.start();
|
this.webServer.start();
|
||||||
@@ -142,6 +143,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
AbstractReactiveWebServerFactory factory = getFactory();
|
AbstractReactiveWebServerFactory factory = getFactory();
|
||||||
Ssl ssl = new Ssl();
|
Ssl ssl = new Ssl();
|
||||||
ssl.setKeyStore(keyStore);
|
ssl.setKeyStore(keyStore);
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
ssl.setKeyPassword(keyPassword);
|
ssl.setKeyPassword(keyPassword);
|
||||||
ssl.setKeyAlias("test-alias");
|
ssl.setKeyAlias("test-alias");
|
||||||
factory.setSsl(ssl);
|
factory.setSsl(ssl);
|
||||||
@@ -187,6 +189,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
ssl.setClientAuth(Ssl.ClientAuth.WANT);
|
ssl.setClientAuth(Ssl.ClientAuth.WANT);
|
||||||
ssl.setKeyStore("classpath:test.jks");
|
ssl.setKeyStore("classpath:test.jks");
|
||||||
ssl.setKeyPassword("password");
|
ssl.setKeyPassword("password");
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
ssl.setTrustStore("classpath:test.jks");
|
ssl.setTrustStore("classpath:test.jks");
|
||||||
testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector());
|
testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector());
|
||||||
}
|
}
|
||||||
@@ -198,6 +201,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
ssl.setKeyStore("classpath:test.jks");
|
ssl.setKeyStore("classpath:test.jks");
|
||||||
ssl.setKeyPassword("password");
|
ssl.setKeyPassword("password");
|
||||||
ssl.setTrustStore("classpath:test.jks");
|
ssl.setTrustStore("classpath:test.jks");
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
testClientAuthSuccess(ssl, buildTrustAllSslConnector());
|
testClientAuthSuccess(ssl, buildTrustAllSslConnector());
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -232,6 +236,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
Ssl ssl = new Ssl();
|
Ssl ssl = new Ssl();
|
||||||
ssl.setClientAuth(Ssl.ClientAuth.NEED);
|
ssl.setClientAuth(Ssl.ClientAuth.NEED);
|
||||||
ssl.setKeyStore("classpath:test.jks");
|
ssl.setKeyStore("classpath:test.jks");
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
ssl.setKeyPassword("password");
|
ssl.setKeyPassword("password");
|
||||||
ssl.setTrustStore("classpath:test.jks");
|
ssl.setTrustStore("classpath:test.jks");
|
||||||
testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector());
|
testClientAuthSuccess(ssl, buildTrustAllSslWithClientKeyConnector());
|
||||||
@@ -242,6 +247,7 @@ public abstract class AbstractReactiveWebServerFactoryTests {
|
|||||||
Ssl ssl = new Ssl();
|
Ssl ssl = new Ssl();
|
||||||
ssl.setClientAuth(Ssl.ClientAuth.NEED);
|
ssl.setClientAuth(Ssl.ClientAuth.NEED);
|
||||||
ssl.setKeyStore("classpath:test.jks");
|
ssl.setKeyStore("classpath:test.jks");
|
||||||
|
ssl.setKeyStorePassword("secret");
|
||||||
ssl.setKeyPassword("password");
|
ssl.setKeyPassword("password");
|
||||||
ssl.setTrustStore("classpath:test.jks");
|
ssl.setTrustStore("classpath:test.jks");
|
||||||
testClientAuthFailure(ssl, buildTrustAllSslConnector());
|
testClientAuthFailure(ssl, buildTrustAllSslConnector());
|
||||||
|
|||||||
Reference in New Issue
Block a user