将启用 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

用于启用 SSL 的 Spring Boot Cassandra 配置

springBoot2.x启用https和兼容http

启用 SSL 后 Kafka Connect 超出 Java 堆空间