JAVA信任自签名证书
这篇文章是为了解决 Java 使用 SSL 过程中出现PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
的问题。
问题
今天在给微服务添加自签名证书后,微服务间使用 SSL 验证权限时出现了如下错误。
1 | javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target |
这是因为自签名证书不被 Java 信任导致 SSL 握手失败。我看网上有不少是通过代码忽略证书验证来解决的,但是我觉得不能一刀切忽略验证,而是应该将特定证书添加到服务器的 Java 证书信任库中。
Java 信任自签名证书
1 | keytool -import -trustcacerts -alias nginx -file /opt/ssl/server.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -keyalg RSAs -noprompt |
-alias
,证书别名,可以任意填写,但不能重复-file
,需要导入的证书路径-keystore
,Java 证书库地址,默认地址为$JAVA_HOME/jre/lib/security/cacerts
-storepass
,Java 证书库密码,默认密码为changeit
这样就将证书导入到了该服务器的 Java 证书信任库中了,涉及到这个证书的 Java 应用需要重启才能生效。
相关文章
-
2022-03-20
两数之和 - 力扣
难度简单
-
2021-07-24
最近想写一些功能接口给自己用,平常写前端比较多,我自己可怜的小服务器用 java 资源不是很充足,所以准备还是用 Node.js 来实现后端,选用 NestJS 作为本次开发的后端框架。
-
2020-01-05
分享一下最新的官方 Telegram 关闭敏感内容过滤的方法。
-
2022-04-18
每次 maven 打包更新时,静态文件的路径不会变,如果用户不清缓存的话,就存在更新不及时的问题.所以需要在打包时自动添加时间戳,以实现用户无需清缓存就能使用到最新版本的目标。
-
2018-08-11
在我使用
git push
、hexo deploy
等类似操作时,时常会看到ttyname failed: Inappropriate ioctl for device
的报错信息。这怎么能行,不是0 errors,0 warnings
能行?这里就来记录一下这个问题的解决办法。