java访问https连接报错 unable to find valid certification path to requested target

1、报错原因

用浏览器可以正常访问,用httpclient不可以,是因为javaSSL证书校验失败,即java验证对方HTTPS证书时找不到完整的信任链。而浏览器对比java,会自动补全中间证书、使用系统的信任库、有更宽松的兼容策略。

若在开发的调试过程中,可以采用以下方法跳过验证。

复制代码
public class SSLUtil {
    public static void ignoreSSL() throws Exception {
        TrustManager[] trustAllCerts = new TrustManager[]{
                new X509TrustManager() {
                    public X509Certificate[] getAcceptedIssuers() { return null; }
                    public void checkClientTrusted(X509Certificate[] certs, String authType) {}
                    public void checkServerTrusted(X509Certificate[] certs, String authType) {}
                }
        };

        SSLContext sc = SSLContext.getInstance("TLS");
        sc.init(null, trustAllCerts, new java.security.SecureRandom());

        HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());

        HttpsURLConnection.setDefaultHostnameVerifier((hostname, session) -> true);
    }
}

//方法调用

SSLUtil.ignoreSSL();

2、解决方法

(1) 下载证书

访问https连接,在浏览器左侧会发现安全锁的标志,点击安全锁弹出如图对话框:

点击连接安全之后,点击图中证书标志,之后导出证书到本地。

(2) 导入到java库

在cmd或者powerShell中使用以下命令导入证书,导入过程中会显示是否信任此证书,输入y后回车即可。

复制代码
keytool -import -alias XXX //文件命名
-file XXXX.crt //已下载的证书文件
-keystore "XXX\jre\lib\security\cacerts" //java的秘钥库文件
-storepass changeit //默认密码

导入成功后再次连接验证发现无报错。

相关推荐
wangl_9226 分钟前
Modbus RTU 与 Modbus TCP 深入指南-现代替代协议
网络·网络协议·tcp/ip·tcp·modbus·rtu
七夜zippoe2 小时前
Python RESTful API设计终极指南:从理论到企业级实战
开发语言·python·http·pandas·restful api
霸道流氓气质3 小时前
SpringAIAlibaba整合 Streamable HTTP 调用免费 MCP Server 实战全解
网络·网络协议·http
winlife_4 小时前
在 Unity Editor 里跑 HTTP MCP server:主线程边界与请求 marshal 的实现要点
http·unity·游戏引擎·多线程·mcp
上海云盾-小余5 小时前
网站木马植入原理与彻底清除、长效防御方案
网络·网络协议·tcp/ip·系统安全
游戏开发爱好者87 小时前
使用Fiddler设置HTTPS抓包诊断Power Query网络问题
android·ios·小程序·https·uni-app·iphone·webview
源远流长jerry7 小时前
TCP 三次握手深度解析:从内核源码到生产实践
linux·运维·网络·网络协议·tcp/ip
加号37 小时前
【Python】 实现 HTTP 网络请求功能入门指南
网络·python·http
xlq223228 小时前
53.tcp socket
linux·服务器·开发语言·网络·网络协议·tcp/ip
Kiyra9 小时前
限流不是加个计数器就行:用 Lua 脚本实现多维度原子限流
开发语言·人工智能·网络协议·职场和发展·架构·lua·ai-native