Android 端Https 访问

来源:互联网 发布:sql*plus不能启动 编辑:程序博客网 时间:2024/06/06 12:52
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;                }            });
0 0
原创粉丝点击