如何解决如何将 SSL 客户端证书与 Apache commons http 客户端一起使用
我的应用程序正在使用 Apache Commons HTTP 客户端来使用 HTTP 服务 URL。现在我们必须移动 HTTPS 端点 URL。为了使用相同的内容,我们收到了 SSL 客户端证书。我们如何在使用 HTTPS URL 时使用带密码的 .JKS ? (由于应用程序限制不能使用其他API)
KeyStore identityKeyStore = KeyStore.getInstance("JKS");
FileInputStream identityKeyStoreFile = new FileInputStream(new File(certificatePath));
identityKeyStore.load(identityKeyStoreFile,password.tochararray());
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(identityKeyStore);
KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("SunX509");
keyManagerFactory.init(identityKeyStore,password.tochararray());
SSLContext sslContext = SSLContext.getInstance("SSL");
sslContext.init(keyManagerFactory.getKeyManagers(),tmf.getTrustManagers(),null);
SSLContext.setDefault(sslContext);
PostMethod post = new PostMethod("https://url");
HttpClient httpClient = new HttpClient();
String reqMessage = getSolaceRequestMessage(message,hostName,port,authentication);
Part[] parts = {
new StringPart("reqMessage",message),};
post.setRequestEntity(
new MultipartRequestEntity(parts,post.getParams())
);
httpClient.executeMethod(post);
解决方法
我们在后台服务部分使用的 *.jks。
我可以给你一个我的项目 Java Spring Boot 的例子,我在我的后台服务中更改了 http --> https,并在 Nginx 中添加了我的证书。
Example of https simple services
当您改回服务时,您可以直接在前端应用程序中调用 https(例如 web angular)。
,我使用了以下对我有用的实现,因为有不升级 http 客户端库的限制。
System.setProperty(JAVAX_NET_SSL_TRUSTSTORE,"H://certificateFile.jks");
System.setProperty(JAVAX_NET_SSL_TRUSTSTORE_KEY,"abcd");
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。