公司里项目集成的第三方接口很多,三方接口都是公司其他项目的,大部分都是http的,测试环境没有通,直接干上生产了.问题来了,跑任务的时候掉https的接口时报了点异常.网上说的有两种解决方法,1是添加证书,2是忽略证书,这里用的是2.直接cv过去,在RestTemplate执行调用方法前,TrustSslUtil.initDefaultSsl()调用一下就行
package com.anxing.rest;
import javax.net.ssl.*;
import java.net.Socket;
import java.security.SecureRandom;
import java.security.cert.X509Certificate;
/**
* 忽略证书验证
*/
public class TrustSslUtil {
public static void initDefaultSsl() {
try {
SSLContext sc = SSLContext.getInstance("SSL");
HostnameVerifier hv = (urlHostName, session) -> true;
TrustManager[] trustAllCerts = new TrustManager[]{
new X509ExtendedTrustManager() {
@Override
public void checkClientTrusted(X509Certificate[]
x509Certificates, String s) {
}
@Override
public void checkServerTrusted(X509Certificate[]
x509Certificates, String s) {
}
@Override
public X509Certificate[] getAcceptedIssuers() {
return null;
}
@Override
public void checkClientTrusted(X509Certificate[]
x509Certificates, String s, Socket socket) {
}
@Override
public void checkServerTrusted(X509Certificate[]
x509Certificates, String s, Socket socket) {
}
@Override
public void checkClientTrusted(X509Certificate[]
x509Certificates, String s, SSLEngine sslEngine) {
}
@Override
public void checkServerTrusted(X509Certificate[]
x509Certificates, String s, SSLEngine sslEngine) {
}
}};
sc.init(null, trustAllCerts, new SecureRandom());
SSLContext.setDefault(sc);
HttpsURLConnection.setDefaultHostnameVerifier(hv);
} catch (Exception e) {
e.printStackTrace();
}
}
}
.......
RestTemplate re =new RestTemplate();
TrustSslUtil.initDefaultSsl();
re.getForObject(URL,String.class);
......