将启用 SSL 的 Java SpringBoot 战争部署到外部 Tomcat 服务器
Posted
技术标签:
【中文标题】将启用 SSL 的 Java SpringBoot 战争部署到外部 Tomcat 服务器【英文标题】:Deploy an SSL enabled Java SpringBoot war to External Tomcat Server 【发布时间】:2018-07-28 04:48:49 【问题描述】:我有一个 spring boot 应用程序,它是一个启用 SSL 的应用程序,我可以通过 localhost 访问它。 “https://localhost:8443/showPage”像这样。对于本地主机,我创建了 SSL 证书并在 application.properties 中提供了详细信息,如下所示
server.port: 8443
server.ssl.key-store: classpath:keystore.p12
server.ssl.key-store-password: 123456
server.ssl.keyStoreType: PKCS12
server.ssl.keyAlias: tomcat
这对本地主机非常有效。我想将战争部署到已经启用 SSL 的 tomcat 服务器。为此,我更改了如下属性
server.port: 8443
server.ssl.key-store: /opt/tomcat/keystore/keystorefile.jks
server.ssl.key-store-password: Rv$@1234
server.ssl.keyStoreType: JKS
server.ssl.keyAlias: tomcat
但是我在访问任何请求时都得到了下面的图像。我正确地调用了请求。不是如图所示。像这样:“https://ipaddress:8443/war_name/showPage”
我的控制器接受请求 @RequestMapping("showPage")
【问题讨论】:
server.*
属性在部署到容器时无用。这些仅在运行 jar/war 和配置嵌入式容器时有用。
【参考方案1】:
我花了几天时间寻找答案,所以我将在此处发布我的解决方案供其他人关注。我正在使用 Spring Boot 2 和在 centOs 8 上运行的外部 tomcat 9。
获取 SSL 证书,我使用带有密码的 keytool 创建了一个自签名证书。
将 jks 和 p12 文件存储在您的 apache 服务器上。我把它存储在 /opt/tomcat
编辑您的 apache server.xml 文件以获得类似的内容。
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
keystoreFile="/opt/tomcat/keystore.p12" keystorePass="password"
clientAuth="false" sslProtocol="TLS" sslEnabledProtocols="TLSv1.2,TLSv1.1"/>
重启Tomcat
为 8443 打开防火墙端口并重启防火墙守护进程
firewall-cmd --zone=public --permanent --add-port 8443/tcp
firewall-cmd --reload
一旦你知道步骤是非常快的!只是不要忘记任何事情。
【讨论】:
你在 spring 配置中做了哪些改变?以上是关于将启用 SSL 的 Java SpringBoot 战争部署到外部 Tomcat 服务器的主要内容,如果未能解决你的问题,请参考以下文章
启用 ssl 和 Elastic Beanstalk 的 Spring Boot - 找不到文件
如何在 Spring Boot / Spring Data 中为 Amazon RDS Mysql 启用 SSL?
如何在没有 SSL 配置的情况下使用 spring boot 和 tomcat 启用 http2