您的位置:首页 > 产品设计 > UI/UE

Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certific

2016-02-23 17:26 861 查看
应用程序客户端访问https服务时报错。直接给出解决方案:

package http;

import java.net.MalformedURLException;

import java.net.URL;

public class HttpClientTest3 {

public static void main(String[] args) throws MalformedURLException {

AbstractCasProtocolUrlBasedTicketValidator validator = new AbstractCasProtocolUrlBasedTicketValidator();

String url = "https://localhost:8443/tms/service/domain/getDomains.action?domainID=1000_1456217771733";

URL hahaUrl = new URL(url);

String content = validator.retrieveResponseFromServer(hahaUrl, null);

System.out.println(content);

}

}

package http;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.net.HttpURLConnection;

import java.net.URL;

import javax.net.ssl.HostnameVerifier;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLSession;

/**

* Abstract class that knows the protocol for validating a CAS ticket.

*

* @author Scott Battaglia

* @version $Revision$ $Date$

* @since 3.1

*/

public class AbstractCasProtocolUrlBasedTicketValidator {

protected AbstractCasProtocolUrlBasedTicketValidator() {

}

HostnameVerifier hv = new HostnameVerifier() {

public boolean verify(String urlHostName, SSLSession session) {

System.out.println("Warning: URL Host: " + urlHostName + " vs. "

+ session.getPeerHost());

return true;

}

};

/**

* Retrieves the response from the server by opening a connection and merely

* reading the response.

*/

protected final String retrieveResponseFromServer(final URL validationUrl,

final String ticket) {

HttpURLConnection connection = null;

//System.out.println("============================================================");

try {

trustAllHttpsCertificates();

HttpsURLConnection.setDefaultHostnameVerifier(hv);

connection = (HttpURLConnection) validationUrl.openConnection();

final BufferedReader in = new BufferedReader(new InputStreamReader(

connection.getInputStream()));

String line;

final StringBuffer stringBuffer = new StringBuffer(255);

synchronized (stringBuffer) {

while ((line = in.readLine()) != null) {

stringBuffer.append(line);

stringBuffer.append("\n");

}

return stringBuffer.toString();

}

} catch (final IOException e) {

return null;

} catch (final Exception e1){

return null;

}finally {

if (connection != null) {

connection.disconnect();

}

}

}

private static void trustAllHttpsCertificates() throws Exception {

javax.net.ssl.TrustManager[] trustAllCerts = new javax.net.ssl.TrustManager[1];

javax.net.ssl.TrustManager tm = new miTM();

trustAllCerts[0] = tm;

javax.net.ssl.SSLContext sc = javax.net.ssl.SSLContext

.getInstance("SSL");

sc.init(null, trustAllCerts, null);

javax.net.ssl.HttpsURLConnection.setDefaultSSLSocketFactory(sc

.getSocketFactory());

}

static class miTM implements javax.net.ssl.TrustManager,

javax.net.ssl.X509TrustManager {

public java.security.cert.X509Certificate[] getAcceptedIssuers() {

return null;

}

public boolean isServerTrusted(

java.security.cert.X509Certificate[] certs) {

return true;

}

public boolean isClientTrusted(

java.security.cert.X509Certificate[] certs) {

return true;

}

public void checkServerTrusted(

java.security.cert.X509Certificate[] certs, String authType)

throws java.security.cert.CertificateException {

return;

}

public void checkClientTrusted(

java.security.cert.X509Certificate[] certs, String authType)

throws java.security.cert.CertificateException {

return;

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: