Android 端Https 访问

Https 接口使用环境,服务器端一个证书,生成一个客户端证书,在访问服务接口时使用客户端证书,访问服务器端https,增强对传输安全。
在开发过程中使用okhttp框架来实现https访问自签名的接口。首先拿到后台自签名证书sChat.cer 放在assets里面。通过getAssets().open("sChat.cer");来读取
以下为
OkHttpClient client=null;
InputStream in=getResources().getAssets().open("sChat.cer");
String result=null;
//生成工厂类实例
CertificateFactory certificateFactory=CertificateFactory.getInstance("x509");//一种普通的证书格式 符合ITU-T X 509国际标准
//获取到证书
            Certificate ca = certificateFactory.generateCertificate(in);  
            in.close();
 //这里面用的证书没有设置私钥,执行空加载
 keyStore.load(null,null);
 //将得到的证书存放到KeyStore里
            keyStore.setCertificateEntry("ca", ca);
//请求安全套接字类  TLC请求协议
            SSLContext sslContext = SSLContext.getInstance("TLS");
            //初始化SSL
            TrustManagerFactory trustManagerFactory=TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());
            trustManagerFactory.init(keyStore);
            sslContext.init(null, trustManagerFactory.getTrustManagers(), null);
            //创建http客户端
            client=new OkHttpClient();      

            Request request=new Request.Builder().url(url).build();
            Log.d(ProjectAssist.TAG, "httpsCheckConnect "+url);
            Response response=client.newCall(request).execute();
            if(response.isSuccessful()){
                result=response.body().string();
            }

但是在运行的时候
javax.net.ssl.SSLPeerUnverifiedException: Hostname host not verified
SSL 验证服务器证书 Hostname 不匹配
向大神请教的是HostnameVerifier不设置的话,默认返回false,需要自定义实现一个HostnameVerifier

在clinet访问之前设置hostname认证 在里面添加需要的业务服务器地址,进行认证

 client.setHostnameVerifier(new HostnameVerifier() {

                @Override
                public boolean verify(String hostname, SSLSession session) {
                    // 判断hostname 的合法性,是否是移动端访问的地址 
                    return true;
                }
            });
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值