为了避免中间人攻击,当终端进行Https访问时,会进行证书验证的工作。
证书验证的基本原理就是:
逐步验证整个证书链,直到找到一个可信的根证书。
如果找不到可信的根证书,就会抛出CertificateException。
有的时候出于一些目的,我们想自己定义证书验证的逻辑,
此时就需要参考一些套路了,其中最主要的就是创建自己的TrustManager。
既然要讲套路,那么就直接来demo了:
..................
private static int checkCertificate() {
int rst = RESULT_SAFE;
//需要进行Https连接
HttpsURLConnection conn = null;
try {
//Https连接可以指定SSLSocketFactory
SSLSocketFactory sf = null;
try {
//创建SSLContext
SSLContext sc = SSLContext.getInstance("TLS");
//指定我们自定义的TrustManager
sc.init(null, createTrustManager(), null);
sf = sc.getSocketFactory();
} catch (Exception e) {
.........
}
URL url = new URL(TEST_URL_HTTPS);
//openConnection仅创建出HttpsURLImplConnection,没有进行实际的网络访问
//还可以设置参数
conn =