Spring Boot打包War部署Tomcat后无法解密application.yml密码的求助
问题排查与解决方案
环境信息
- Spring Boot版本:3.2.3
- Tomcat版本:apache-tomcat-10.1.19
- JDK版本:jdk-21.0.2
- Jasypt依赖:
<dependency> <groupId>com.github.ulisesbocchio</groupId> <artifactId>jasypt-spring-boot-starter</artifactId> <version>3.0.5</version> </dependency>
问题描述
在IDEA中可正常加密/解密application.yml中的数据库密码,但打包为War部署到Tomcat启动时抛出异常:
Reason: java.security.NoSuchAlgorithmException: PBEWithMD5AndTripleDES SecretKeyFactory not available
已在catalina.properties中配置:
jasypt.encryptor.password=password jasypt.encryptor.algorithm=PBEWithMD5AndTripleDES jasypt.encryptor.iv-generator-classname=org.jasypt.iv.NoIvGenerator
解决方案
方案1:更换安全加密算法(推荐)
PBEWithMD5AndTripleDES属于弱加密算法,Java 21已默认禁用/移除该算法。建议更换为高版本JDK支持的安全算法,比如PBEWITHHMACSHA512ANDAES_256:
- 修改
catalina.properties中的算法配置:
jasypt.encryptor.algorithm=PBEWITHHMACSHA512ANDAES_256
- 使用该算法重新加密数据库密码(确保加密时的算法与配置一致)。
方案2:启用旧算法(不推荐,存在安全风险)
如果必须保留旧算法,需修改JDK的安全策略文件:
- 打开JDK安装目录下的
conf/security/java.security文件 - 找到
jdk.crypto.disabledAlgorithms配置项,移除其中的PBEWithMD5AndTripleDES - 保存文件后重启Tomcat
方案3:确认依赖兼容性
检查Jasypt与Spring Boot版本是否匹配,当前使用的jasypt-spring-boot-starter 3.0.5与Spring Boot 3.2.3兼容,若有问题可尝试升级到最新兼容版本(如3.0.6)。
内容的提问来源于stack exchange,提问作者Vincent Zheng
相关产品推荐
相关产品推荐

