运行带有 SSL 和同时未加密的 Spring Boot 应用程序(嵌入式 Tomcat)
Posted
技术标签:
【中文标题】运行带有 SSL 和同时未加密的 Spring Boot 应用程序(嵌入式 Tomcat)【英文标题】:Running A Spring Boot App (Embedded Tomcat) with SSL and Unencrypted Simultaneously 【发布时间】:2014-12-24 10:48:51 【问题描述】:有没有办法运行 Spring Boot 应用程序(可运行的战争),以便它监听两个端口 - 一个使用 SSL,一个没有 SSL。我使用的是嵌入式 Tomcat 8。
目前正在使用 SSL 配置
@Bean
@Profile('tls')
EmbeddedServletContainerCustomizer servletContainerCustomizer ()
throws Exception
new EmbeddedServletContainerCustomizer ()
@Override
public void customize (ConfigurableEmbeddedServletContainer container)
TomcatEmbeddedServletContainerFactory tomcat = (TomcatEmbeddedServletContainerFactory) container
tomcat.addConnectorCustomizers (
new TomcatConnectorCustomizer ()
@Override
public void customize (Connector connector)
connector.setPort (Integer.parseInt (retrieveRequiredSpringProperty ('ssl.connection.port')))
connector.setSecure (true)
connector.setScheme ('https')
connector.setProtocol (retrieveSpringPropertyOrSpecified ('ssl.connection.protocol', 'HTTP/1.1'))
Http11NioProtocol proto = (Http11NioProtocol) connector.getProtocolHandler ()
proto.setSSLEnabled (true)
proto.setKeystoreFile (retrieveRequiredSpringProperty ('ssl.protocol.keystore.file'))
proto.setKeystorePass (retrieveRequiredSpringProperty ('ssl.protocol.keystore.password'))
proto.setKeyPass (retrieveSpringPropertyOrSpecified ('ssl.protocol.keystore.cert.password', null))
proto.setKeystoreType ('JKS')
proto.setKeyAlias (retrieveRequiredSpringProperty ('ssl.protocol.keystore.cert.name'))
proto.setSslProtocol ('TLS')
proto.setClientAuth ('false')
)
我尝试使用多个TomcatConnectorCustomizer
s,但列出的最后一个似乎覆盖而不是添加。
一如既往地欢迎任何建议!
【问题讨论】:
【参考方案1】:TomcatConnectorCustomizer
仅修改现有的Connector
(名称中的线索)。要添加其他连接器,您只需要一个不同的 API(例如 here),例如(从样本中复制):
@Bean
public EmbeddedServletContainerFactory servletContainer()
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
tomcat.addAdditionalTomcatConnectors(createConnector());
return tomcat;
【讨论】:
以上是关于运行带有 SSL 和同时未加密的 Spring Boot 应用程序(嵌入式 Tomcat)的主要内容,如果未能解决你的问题,请参考以下文章
Spring Boot 应用程序在启动时未运行 Flyway 迁移
在带有 spring-boot rest 和 Swagger 的标头中使用 utf-8 字符时未加载响应
使用 Hibernate、Spring 和 JDBC 配置 SSL 证书