无法通过 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.jarUS_export_policy.jar 有问题。用不同的策略罐替换它们,现在一切正常。