目前想要在 Java 程序中调用客户的网站。我搜索了一些资料,排除了代码中内嵌证书的操作(因为客户提供的 SDK 不支持自定义证书)。 所以选择 向 Jdk 信任证书导入自签证书。但是没有操作成功
首先我拿到客户自签的一个客户端 PKCS12 证书链文件 client.p12
使用 openssl 转换成公钥 client.crt 和私钥 client.key
自行用 curl 测试公钥密钥是否可用 curl --cert client.crt --key client.key -X GET -H "Content-Type: application/json" "https://xxx.com" 是可以正常握手的。
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 ) 看了握手日志也没看明白
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.