Java 怎么使用自签证书访问双向认证的网站?

2022-11-09 20:22:38 +08:00
 linuxsteam

需求

目前想要在 Java 程序中调用客户的网站。我搜索了一些资料,排除了代码中内嵌证书的操作(因为客户提供的 SDK 不支持自定义证书)。 所以选择 向 Jdk 信任证书导入自签证书。但是没有操作成功

前置测试操作

首先我拿到客户自签的一个客户端 PKCS12 证书链文件 client.p12

使用 Java 开始干活

导入证书到 keystore

keytool -import -alias client -keystore "C:\Program Files\Zulu\zulu-17\lib\security\cacerts" -storepass changeit -file .\client.crt -trustcacerts

代码测试
String result = HttpUtil.createGet("https://xxx.com")
                .timeout(5 * 60 * 1000)
                .execute()
                .sync()
                .body();

报错 Exception in thread "main" cn.hutool.core.io.IORuntimeException: SSLHandshakeException: Received fatal alert: bad_certificate

生成 jks

keytool -importkeystore -srckeystore client.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore client.jks

System.setProperty("javax.net.ssl.trustStore","D:\\test\\client.jks");
System.setProperty("javax.net.ssl.trustStorePassword", "password");
String result = HttpUtil.createGet("https://xxx.com")
                .timeout(5 * 60 * 1000)
                .execute()
                .sync()
                .body();

疑问

求助 我是哪里操作错了吗?请赐教,小弟已经铜鼓很久了。网络知识太菜了 加了 jvm 参数(-Djavax.net.debug=ssl:handshake ) 看了握手日志也没看明白

853 次点击
所在节点    问与答
2 条回复
linuxsteam
2022-11-09 20:44:10 +08:00
顶一顶
linuxsteam
2022-11-10 06:54:36 +08:00
😫

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/893952

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX