使用Java URL类,我可以连接到外部HTTPS
服务器(例如我们的生产站点),但是使用本地URL我得到以下异常.
"SunCertPathBuilderException: unable to find valid certification path to requested target".
如何获得有效的认证路径?
编辑:我没有使用此URL直接创建连接,我将URL传递给一个itext
PDFReader
,然后有一个连接问题.
这是我的解决方案,它包含了这个主题中的一些想法,并与来自网络的代码一起调整.所有我都调用此函数,它为HttpsURLConnection设置默认的Trust Manager和HostName Verifier.这对某些人来说可能是不受欢迎的,因为它会影响所有HttpsURLConnections,但我只是编写一个简单的代理,因此它对我有用.
private void setTrustAllCerts() throws Exception { TrustManager[] trustAllCerts = new TrustManager[]{ new X509TrustManager() { public java.security.cert.X509Certificate[] getAcceptedIssuers() { return null; } public void checkClientTrusted( java.security.cert.X509Certificate[] certs, String authType ) { } public void checkServerTrusted( java.security.cert.X509Certificate[] certs, String authType ) { } } }; // Install the all-trusting trust manager try { SSLContext sc = SSLContext.getInstance( "SSL" ); sc.init( null, trustAllCerts, new java.security.SecureRandom() ); HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); HttpsURLConnection.setDefaultHostnameVerifier( new HostnameVerifier() { public boolean verify(String urlHostName, SSLSession session) { return true; } }); } catch ( Exception e ) { //We can not recover from this exception. e.printStackTrace(); } }