1、java如何跳过SSL的证书验证
发布于 2022年 02月 08日 16:11
在连接开始前,调用trustAllHttpsCertificates()方法即可
@Test
public void test08(){
String message = "orderToken=2016081516204941291387764" +
"&orderMoney=10.8"+"&OrderStatus=10";
try{
trustAllHttpsCertificates();
URI uri = new URI("https://br-payment.xcloudgame.com/index.php?
s=/PagSmile/pay_callback/order_id/P-SMILE-147134625445/gid/2");
SimpleClientHttpRequestFactory schr = new SimpleClientHttpRequestFactory();
ClientHttpRequest request = schr.createRequest(uri, HttpMethod.POST);
request.getBody().write((message).getBytes());
ClientHttpResponse response = request.execute();
String resultString = new String(FileCopyUtils.copyToByteArray(response.getBody()));
System.out.println("resultString=" + resultString);
}catch (Exception e){
e.printStackTrace();
}
}
// 跳过SSL验证 ,在获取connection之前调用这个方法 trustAllHttpsCertificates
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;
}
}