无法通过 SSH 隧道使用 Java 访问 Web 服务
Web service not accessible with Java over SSH tunnel
我有两台机器 Windows 7。我有 Java 6 应用程序正在调用某些外部 HTTPS Web 服务。为了可以访问该服务,我必须创建一个 SSH 隧道(通过 putty)。但是,此解决方案仅适用于一台机器,因为当应用程序尝试连接到 Web 服务时,第二台机器获得 "java.lang.RuntimeException: Unknown client side exception"。有趣的是,我可以在第二台机器的浏览器中通过 URL 访问该服务。
更新: Link 到堆栈跟踪文件:https://ufile.io/z1y8j
您有两种解决此问题的方法:
第一个是给JVM添加认证。参考这个link:https://docs.oracle.com/javase/tutorial/security/toolsign/rstep2.html。
第二个,如果您使用 java httpClient 来调用安全的 Web 服务,那么您应该忽略此证书,因此您应该通过代码配置它。
请参阅此处的示例,我正在使用 spring 的 RestTemplate 来调用其余 Web 服务并忽略认证。
示例:
@Bean
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException{
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, (org.apache.http.ssl.TrustStrategy) acceptingTrustStrategy).build();
SSLConnectionSocketFactory csf = new
SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient =
HttpClients.custom().setSSLSocketFactory(csf).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
return new RestTemplate(requestFactory);
}
jre/lib/security
中的 local_policy.jar
和 US_export_policy.jar
有问题。用不同的策略罐替换它们,现在一切正常。
我有两台机器 Windows 7。我有 Java 6 应用程序正在调用某些外部 HTTPS Web 服务。为了可以访问该服务,我必须创建一个 SSH 隧道(通过 putty)。但是,此解决方案仅适用于一台机器,因为当应用程序尝试连接到 Web 服务时,第二台机器获得 "java.lang.RuntimeException: Unknown client side exception"。有趣的是,我可以在第二台机器的浏览器中通过 URL 访问该服务。
更新: Link 到堆栈跟踪文件:https://ufile.io/z1y8j
您有两种解决此问题的方法:
第一个是给JVM添加认证。参考这个link:https://docs.oracle.com/javase/tutorial/security/toolsign/rstep2.html。
第二个,如果您使用 java httpClient 来调用安全的 Web 服务,那么您应该忽略此证书,因此您应该通过代码配置它。
请参阅此处的示例,我正在使用 spring 的 RestTemplate 来调用其余 Web 服务并忽略认证。
示例:
@Bean
public RestTemplate restTemplate() throws KeyStoreException, NoSuchAlgorithmException, KeyManagementException{
TrustStrategy acceptingTrustStrategy = (X509Certificate[] chain, String authType) -> true;
SSLContext sslContext = org.apache.http.ssl.SSLContexts.custom()
.loadTrustMaterial(null, (org.apache.http.ssl.TrustStrategy) acceptingTrustStrategy).build();
SSLConnectionSocketFactory csf = new
SSLConnectionSocketFactory(sslContext);
CloseableHttpClient httpClient =
HttpClients.custom().setSSLSocketFactory(csf).build();
HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
requestFactory.setHttpClient(httpClient);
return new RestTemplate(requestFactory);
}
jre/lib/security
中的 local_policy.jar
和 US_export_policy.jar
有问题。用不同的策略罐替换它们,现在一切正常。