java.security.InvalidAlgorithmParameterException原因及其处理方式

一、异常如下 
javax.net .ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) ~[na:1.7.0_75]
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1904) ~[na:1.7.0_75]
at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1862) ~[na:1.7.0_75]
at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1845) ~[na:1.7.0_75] 

Caused by: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
二、问题原因
1、本人的java服务是以jar包的形式运行在linux环境中
2、当程序中使用HTPPS调用第三方接口时候报这个错误
3、原因是因为安装的jdk中jre的以来有问题、没有ssl支持的相关证书包

有问题的jdk/lib目录(缺少其他依赖)


正确的的jdk/lib目录


三、重新解压一个正确jdk的tar包,再次检查目录

四、重启java项目服务
### 解决方案 当遇到 `java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty` 异常时,通常意味着Java的安全配置存在问题,特别是信任库为空。这可能影响到Maven项目的正常运行以及依赖项的下载。 #### 1. 检查JDK安装及其安全性文件夹 确认当前使用的JDK版本是否正确,并且其安全目录下的cacerts文件存在并含有必要的证书条目[^1]。如果发现该文件丢失或损坏,则考虑重新安装相应的JDK环境来恢复默认的信任库。 #### 2. 更新CA根证书 有时操作系统自带的CA根证书过期或者缺失也会引发此类错误。可以通过更新操作系统的CA存储或是手动向JVM添加所需的CA根证书来修复这个问题[^3]。 ```bash keytool -importcert -file /path/to/cert.pem -alias myCertAlias -keystore $JAVA_HOME/jre/lib/security/cacerts ``` 上述命令用于将指定路径中的PEM编码格式的X.509 v3证书导入至JRE的安全证书仓库中;执行过程中会提示输入密码,默认情况下为`changeit`。 #### 3. 配置IDEA代理设置 对于使用IntelliJ IDEA开发工具的情况,确保网络连接设置无误也很重要。进入File -> Settings (Windows/Linux) 或者 IntelliJ IDEA -> Preferences (macOS),找到HTTP Proxy选项卡,取消勾选“Auto-detect proxy settings”,改为手动配置代理服务器地址和端口号,或者是选择不使用任何代理[^2]。 #### 4. 清理本地Maven缓存 尝试清理`.m2/repository`下所有的内容后再让Maven重新解析所需资源,这样可以避免因旧版构件残留而导致的问题: ```shell rm -rf ~/.m2/repository/* mvn clean install ``` 以上措施有助于解决由不同原因引起的`InvalidAlgorithmParameterException`异常情况,在实际应用中可根据具体情况采取相应的方法进行排查处理。
### Maven 构建时无法解析 Parent POM 的原因分析 当遇到 `Non-resolvable parent POM` 错误时,通常是因为 Maven 未能找到指定的父级 POM 文件。对于 Spring Boot 项目而言,如果指定了 `spring-boot-starter-parent` 版本为 `2.2.11.RELEASE` 并且该版本在配置的远程仓库中不可用,则会触发此错误[^1]。 以下是可能的原因以及解决方案: #### 可能原因 1. **本地存储库未缓存目标依赖项** 如果本地 `.m2/repository/` 中不存在对应的父级 POM 或其元数据文件(如 `_remote.repositories`),则 Maven 将尝试从远程仓库下载它。然而,如果远程仓库不包含所需版本,则会出现解析失败的情况[^1]。 2. **远程仓库配置缺失或错误** 默认情况下,Maven 使用中央仓库作为主要资源位置。但如果项目的 `pom.xml` 配置了自定义镜像或其他私有仓库,并且这些仓库缺少所需的 `spring-boot-starter-parent` 版本,则可能导致问题发生。 3. **网络连接问题** 下载过程中可能出现中断或者代理设置不当等问题,从而阻止 Maven 成功获取到必要的构件及其关联信息。 4. **信任锚参数为空 (trustAnchors parameter must be non-empty)** 此类异常通常是由于 JDK 安全策略更新引起,在某些环境中 SSL/TLS 握手验证失败也会间接影响依赖管理操作正常执行。 --- ### 解决方案 #### 方法一:调整仓库地址 确认当前使用的远程仓库列表是否包含了官方发布的 Spring Boot 存储库链接。可以通过修改全局或项目级别的 settings.xml 来添加额外的支持源: ```xml <mirrors> <mirror> <id>central</id> <name>Maven Central Repository Mirror</name> <url>https://repo.maven.apache.org/maven2/</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 同时确保 `<repositories>` 节点下存在如下声明以便支持最新版组件检索: ```xml <repository> <id>spring-milestones</id> <name>Spring Milestone Repository</name> <url>https://repo.spring.io/libs-release</url> </repository> ``` 以上更改可以帮助覆盖掉潜在失效路径并重新定向至可靠站点完成同步过程。 #### 方法二:手动安装依赖包 假如仍然面临访问障碍可以考虑采用离线模式预先准备好所有必需品再导入系统内部供后续调用。具体做法是从可信渠道取得对应压缩包形式的目标产物然后利用命令行工具将其注册进入个人环境之中: ```bash mvn install:install-file \ -Dfile=/path/to/spring-boot-starter-parent-2.2.11.RELEASE.pom \ -DgroupId=org.springframework.boot \ -DartifactId=spring-boot-starter-parent \ -Dversion=2.2.11.RELEASE \ -Dpackaging=pom ``` 注意替换实际物理磁盘上的绝对定位符以匹配实际情况需求[^1]。 #### 方法三:修正安全协议冲突 针对 “invalid algorithm parameter exception”,需核查运行 JVM 实例所加载的安全提供者清单是否存在兼容性隐患。一种常见处理方式是在启动脚本里显式指定允许使用的加密算法套件集合样例如下所示: ```properties -Djdk.tls.disabledAlgorithms= -Djavax.net.ssl.trustStore=/etc/pki/java/cacerts -Djavax.net.ssl.trustStorePassword=changeit ``` 另外也可以升级基础软件栈直至满足现代标准要求来彻底消除此类干扰因素的影响[^1]。 --- ### 总结 通过合理规划可用仓储体系结构、妥善处置特殊场景下的例外状况以及持续优化底层设施架构能够有效缓解乃至杜绝上述提及的各种棘手难题的发生概率。最终达成稳定可靠的自动化流水生产线建设目的。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值