Spring Boot 3 HTTPS项目部署至Tomcat服务器的配置指导求助
Spring Boot 3 线上Tomcat HTTPS部署配置疑问
我已在本地成功为Spring Boot 3项目配置HTTPS,本地application.yaml配置如下:
spring: config: activate: on-profile: development application: name: meteraindo jpa: properties: hibernate: dialect: org.hibernate.dialect.MySQLDialect show-sql: true hibernate: ddl-auto: update datasource: username: root password: 1ron_man url: jdbc:mysql://localhost:3306/meterai driver-class-name: com.mysql.cj.jdbc.Driver servlet: multipart: max-file-size: 50MB max-request-size: 50MB mail: host: smtp.gmail.com port: 587 username: info@cg2net.id password: findingCg2 properties: mail: smtp: auth: true starttls: enable: true ssl: protocols: TLSv1.2 server: port: 8443 ssl: key-store: src/main/resources/meteraindo.p12 key-store-type: PKCS12 key-store-password: padamuNegr1 key-alias: meteraindo ---
非HTTPS模式下,我只需执行mvn clean install并上传war包即可完成部署,但部署至线上Tomcat服务器时,有以下疑问:执行mvn install时Spring Boot是否会将.p12文件整合进war包?还是需要手动上传至服务器?
我已取消注释Tomcat的server.xml中以下配置:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol" maxThreads="150" SSLEnabled="true" > <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/> <SSLHostConfig> <Certificate certificateKeyFile="conf/localhost-rsa-key.pem" certificateFile="conf/localhost-rsa-cert.pem" certificateChainFile="conf/localhost-rsa-chain.pem" type="RSA" /> </SSLHostConfig> </Connector>
恳请指导我完成服务器端的配置与部署步骤,提前感谢!
更新:按照@M. Deinum的建议,使用可执行jar包在虚拟机测试时HTTPS可正常运行,但部署至阿里云主机时无法运行,推测需要额外配置。
解答
一、关于.p12文件是否会被打包进war包
如果你的.p12文件放在src/main/resources目录下,执行mvn clean install时,Maven会自动将该目录下的文件打包到war包的WEB-INF/classes目录中。但注意:当把Spring Boot项目以war包部署到外部Tomcat时,application.yaml里的server.ssl相关配置会被外部Tomcat忽略,外部Tomcat会使用自身server.xml中的SSL配置。
二、线上Tomcat服务器配置与部署步骤
针对当前情况,有两种部署方案可选:
方案1:使用外部Tomcat托管war包(推荐统一用Tomcat管理SSL)
调整Spring Boot项目配置
- 修改
application.yaml,移除server.ssl相关配置,将server.port改为Tomcat默认HTTP端口(如8080),因为外部Tomcat会接管端口和SSL。 - 确保
pom.xml中打包方式为war:<packaging>war</packaging> - 添加Tomcat starter依赖(若之前为jar部署需调整):
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <scope>provided</scope> </dependency>
- 修改
配置外部Tomcat的SSL
- 将
meteraindo.p12上传到Tomcat的conf目录(或指定的安全目录)。 - 修改Tomcat的
server.xml,替换原有SSL Connector配置为适配PKCS12格式的内容:
注:若为正规购买的证书,需确保证书链完整;自签名证书需在服务器上信任该证书。<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="150" SSLEnabled="true"> <SSLHostConfig> <Certificate certificateKeystoreFile="conf/meteraindo.p12" certificateKeystorePassword="padamuNegr1" type="RSA" /> </SSLHostConfig> </Connector> - 可选:配置HTTP跳转HTTPS,在
server.xml的Engine标签下添加:
然后在Tomcat的<Valve className="org.apache.catalina.valves.rewrite.RewriteValve" />conf/Catalina/localhost下创建rewrite.config文件,内容如下:RewriteCond %{HTTPS} off RewriteRule ^(.*)$ https://%{SERVER_NAME}:8443$1 [R,L]
- 将
部署war包
- 执行
mvn clean install生成war包,上传到Tomcat的webapps目录,Tomcat会自动解压部署。 - 启动Tomcat,访问
https://你的服务器IP:8443/项目上下文路径即可。
- 执行
方案2:使用可执行jar包部署(Spring Boot自带嵌入式Tomcat)
既然虚拟机测试可执行jar正常,部署到阿里云失败需做以下检查配置:
- 阿里云安全组配置
- 登录阿里云控制台,进入对应ECS实例的安全组规则,添加入方向规则,开放8443端口(HTTPS)。
- 服务器防火墙配置
- 若服务器开启防火墙(如firewalld或iptables),需开放8443端口:
- firewalld命令:
sudo firewall-cmd --add-port=8443/tcp --permanent,再执行sudo firewall-cmd --reload - iptables命令:
sudo iptables -A INPUT -p tcp --dport 8443 -j ACCEPT,保存规则。
- firewalld命令:
- 若服务器开启防火墙(如firewalld或iptables),需开放8443端口:
- 证书路径检查
- 若jar包已包含
.p12,确保application.yaml中key-store路径正确;若使用外部证书文件,建议用绝对路径(如/opt/certs/meteraindo.p12),并保证运行jar的用户有读取权限。
- 若jar包已包含
- 启动jar包
- 用命令
nohup java -jar 你的项目jar包名.jar --spring.profiles.active=development &后台运行,查看nohup.out日志排查错误。
- 用命令
三、常见问题排查
- 访问HTTPS出现证书错误:检查证书有效性、域名匹配度(若为域名证书)。
- jar包启动失败:查看日志中的错误信息,比如证书路径错误、密码不正确、端口被占用等。
- Tomcat启动失败:查看
logs/catalina.out日志,排查SSL配置是否有误。
内容的提问来源于stack exchange,提问作者fajar setiawan
相关产品推荐
相关产品推荐

