Android中Https证书认证(防会话劫持)

原创
2019/08/06 16:22
阅读数 414

问题

Android中间人会话劫持

思路

在代码中对https证书进行验证。

解决

步骤1:获取合法https证书

通过浏览器下载https证书,保存到assets文件夹,如下图:

证书保存位置

步骤2:实现https证书认证

 try {
    //获取X.509格式的内置证书
    CertificateFactory certificateFactory = CertificateFactory.getInstance("X.509");
    KeyStore keyStore = KeyStore.getInstance(KeyStore.getDefaultType());
    keyStore.load(null);
    Collection<? extends Certificate> cers = certificateFactory.generateCertificates(context.getAssets().open("MY.cer"));
    int index = 0;
    for (Certificate certificate : cers) {
        String certificateAlias = Integer.toString(index++);
        keyStore.setCertificateEntry(certificateAlias, certificate);
    }
    //用这个KeyStore去引导生成的TrustManager来提供验证
    final TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
    trustManagerFactory.init(keyStore);
    //用TrustManager生成SSLContext
    SSLContext sslContext = SSLContext.getInstance("TLS");
    sslContext.init(null, trustManagerFactory.getTrustManagers(), new SecureRandom());
    //SSLContext返回SSLSocketFactory
    return sslContext.getSocketFactory();
} catch (Exception e) {
    throw new RuntimeException(e);
}

总结

这样就可以防止中间人https证书伪造之类的劫持了。

参考

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部