Using Embedded Tomcat 10 in SpringBoot, trying to manually configure a new
HTTPS/SSL port. I've got the following SSL bundle set in my application
properties (fairly sure this part is working fine):
spring.ssl.bundle.jks.rbupbundle.key.alias=RBup
spring.ssl.bundle.jks.rbupbundle.keystore.location=classpath:RBup.p12
spring.ssl.bundle.jks.rbupbundle.keystore.password=Whatever321
spring.ssl.bundle.jks.rbupbundle.keystore.type=PKCS12
Inside the Tomcat bean, I configure the webserver:
public TomcatServletWebServerFactory tomcatFactory(SslBundles sslBundles) {
return new TomcatServletWebServerFactory() {
@Override
protected TomcatWebServer
getTomcatWebServer(org.apache.catalina.startup.Tomcat tomcat) {
int port = Integer.parseInt(userPrefs.getWebServerPort());
tomcat.enableNaming();
Connector connector = new Connector(
"org.apache.coyote.http11.Http11NioProtocol");
Http11NioProtocol prot = (Http11NioProtocol) connector.getProtocolHandler();
connector.setPort(9000);
connector.setSecure(true);
connector.setScheme("https");
connector.setProperty("SSLEnabled", "true");
SslBundle sslBundle = sslBundles.getBundle("rbupbundle");
SslBundleKey sbk = sslBundle.getKey();
SslStoreBundle ssb = sslBundle.getStores();
SSLHostConfig shc = new SSLHostConfig();
SSLHostConfigCertificate sslHostCert = new SSLHostConfigCertificate();
sslHostCert.setCertificateKeystore(ssb.getKeyStore());
shc.addCertificate(sslHostCert);
shc.setHostName("localhost");
prot.addSslHostConfig(shc);
tomcat.getService().addConnector(connector);
return super.getTomcatWebServer(tomcat);
}
Not sure why I'm getting:
Caused by: java.lang.NullPointerException: Cannot invoke
"org.apache.tomcat.util.net.SSLHostConfig.getProtocols()" because
"this.sslHostConfig" is null
at org.apache.tomcat.util.net.SSLUtilBase.<init>(SSLUtilBase.java:92)
at org.apache.tomcat.util.net.jsse.JSSEUtil.<init>(JSSEUtil.java:61)
at org.apache.tomcat.util.net.jsse.JSSEUtil.<init>(JSSEUtil.java:56)
at
org.apache.tomcat.util.net.jsse.JSSEImplementation.getSSLUtil(JSSEImplementation.java:52)
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.createSSLContext(AbstractJsseEndpoint.java:95)
at
org.apache.tomcat.util.net.AbstractJsseEndpoint.initialiseSsl(AbstractJsseEndpoint.java:70)
at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:207)
at
org.apache.tomcat.util.net.AbstractEndpoint.bindWithCleanup(AbstractEndpoint.java:1271)
at
org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:1284)
at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:622)
at
org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:77)
at org.apache.catalina.connector.Connector.initInternal(Connector.java:1013)
... 21 more
Note: I am new to Tomcat and most of these concepts, also side note if
anyone could chime in to why setCertificateFile
disappeared from SSLHostConfig in the Tomcat API from 9 to 10, it didn't
look like it was deprecated and many
examples use it.
--
Adam Michael Danischewski
Software Engineer
Phone: (929) 308-9674
Email: [email protected]
Github: http://github.com/AdamDanischewski