目前想要在 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 ) 看了握手日志也没看明白
1
linuxsteam OP 顶一顶
|
2
linuxsteam OP 😫
|