关于使用AsycnHttp 框架  访问Https问题

公司用的是这个框架  突然需要访问Https        嗯。。

先看看Https是什么吧  

安全超文本传输 使用套接字层SSL 进行交换 HTTP+SSL 
HTTP 端口80  https端口 443
Https的过程
链接service 443端口  服务器端有一套数字证书  证书其实就是公钥和私钥 (  
公钥和私钥  
向服务端请求 服务端给客户端发送 锁 (公钥)客户点拿这个锁给自己的数据锁起来  然后发送给服务端 服务端用自己私人的钥匙(私钥) 解锁    )
传输证书 (公钥) 客户端解析 验证证书是否有效  有效的话 会产生个随机值  然后对随机值进行加密 锁起来
传给服务端  然后服务端进行对称加密(就是用同一个密钥(私钥)进行加密和解密
(加密是将数据资料加密 即使得到了资料也获取不到  认证 是身份认证 判断身份信息)

如何解决呢

AsyncHttpClient client = new AsyncHttpClient();
然后我们发现有这个方法 client.setSSLSocketFactory();
public void setSSLSocketFactory(SSLSocketFactory sslSocketFactory) {
    this.httpClient.getConnectionManager().getSchemeRegistry().register(new Scheme("https", sslSocketFactory, 443));
}
点进SSLSocketFactory看看 是什么 
有一个
ALLOW_ALL_HOSTNAME_VERIFIER  好像允许所有主机的方法   

找到了他的构造方法 
所以最后我们可以
X509HostnameVerifier hostnameVerifier = ALLOW_ALL_HOSTNAME_VERIFIER;
        //BROWSER_COMPATIBLE_HOSTNAME_VERIFIER
        SSLContext sc = null;
        try {
            sc = SSLContext.getInstance("TLS");
            sc.init(null, new TrustManager[]{new TrustAllManager()},new SecureRandom());
        } catch (Exception e) {
            e.printStackTrace();
        }
        cz.msebera.android.httpclient.conn.ssl.SSLSocketFactory s = new SSLSocketFactory(sc,hostnameVerifier );
        client.setSSLSocketFactory(s);

private static class TrustAllManager implements X509TrustManager {
        @Override
        public void checkClientTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {

        }

        @Override
        public void checkServerTrusted(java.security.cert.X509Certificate[] x509Certificates, String s) throws java.security.cert.CertificateException {

        }
        @Override
        public java.security.cert.X509Certificate[] getAcceptedIssuers() {
            return new X509Certificate[0];
        }
    }


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值