我正在尝试从使用 SSL 身份验证的 Java 客户端调用后端 API。对于 .Net,在 MS 文档中有一个关于如何实现这一点的片段,但对于 Java 没有。
我已使用我的私人证书指纹和 WEBSITE_LOAD_USER_PROFILE=1 添加了应用程序设置 - WEBSITE_LOAD_CERTIFICATES
我试图连接这些点并最终得到以下代码,但我收到错误:
KeyStore ks;
ks = KeyStore.getInstance("Windows-MY");
ks.load(null, null);
Certificate cert = ks.getCertificate("<subject-cn>");
TrustManagerFactory trustManagerFactory =
TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
trustManagerFactory.init(ks);
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
SSLSocketFactory factory = sslContext.getSocketFactory();
HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setSSLSocketFactory(factory);
conn.setRequestMethod("GET");
conn.setRequestProperty("Accept", "application/json");
错误::javax.net.ssl.SSLHandshakeException: PKIX 路径构建失败:sun.security.provider.certpath.SunCertPathBuilderException: 无法找到请求目标的有效证书路径。
上面的代码有什么问题?有没有关于如何实现这一点的文档?