前言
最近在对接业务的时候,需要请求云上厂家的接口。
首先说明一点,云是属于内网环境的,且调用是HTTPS协议的,所以厂家使用到了自签证书。而自签证书在对于不处于同一内部网络的机器,在进行HTTPS请求的时候,就会遇到SSL验证无法通过的问题,如以下。
curl: (35) OpenssL SSL connect: Connection reset by peer in connection to ip:port
第一步
你要确定的是,你的请求只是因为绕不过去SSL验证。如果你中间还套了一层网闸,或者其他网络转发的话,那么即时你使用下方的解决思路,也是错误的。因为很有可能你的本机地址映射出去的IP并不是你用 ip addr
命令输出的地址,这点你要确定好。
第二步
非常重要的事,使用telnet ip port
,测试网络连接情况,如果能够正常建立起连接,那么说明你的请求是可以出去你所处的云网络的。
第三步
简单测试,使用curl命令进行排障,先把接口使用postman等工具编辑好后生成curl语句,并且在生成的语句内添加上 -k
或者 --insecure
,如果能正常返回业务结果,那么就可以开始尝试写绕过SSL验证的代码了。
具体代码下方已经给出。
工具类:
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;
import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;
public class SslUtils {
private static void trustAllHttpsCertificates() throws Exception {
TrustManager[] trustAllCerts = new TrustManager[1];
TrustManager tm = new miTM();
trustAllCerts[0] = tm;
SSLContext sc =