关于Android Https方式

本文主要在 okhttp框架基础上进行操作;

首先集成gradle:

    compile 'com.zhy:okhttputils:2.6.2'
    eclipse 哥们请自行百度用法。

主要是的okhttp 框架, 建议没基础的哥们去看看使用方法

读取证书并转化为流的方法

//获取指定证书的流对象。
    public InputStream[] getAssignInputStreams(String cer){
        InputStream ins[] = null;
        String result = "";
        try {
            ins[0] = context.getAssets().open(cer); //下载的证书放到项目中的assets目录中
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  ins;

    }

    //获取指定证书的流对象。
    public InputStream getAssignInputStream(String cer){
        InputStream ins = null;
        String result = "";
        try {
            ins = context.getAssets().open(cer); //下载的证书放到项目中的assets目录中
        } catch (IOException e) {
            e.printStackTrace();
        }
        return  ins;

    }

-设置信任全部证书

 //设置信任全部证书
    public void setAllCertificates(){

     HttpsUtils.SSLParams sslParams=HttpsUtils.getSslSocketFactory(null, null, null);
        mOkHttpClient.newBuilder().sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager)
                //其他配置
                .build();
        okHttpUtils.initClient(mOkHttpClient);
    }



-设置信任指定证书

 /**
     *  设置信任具体证书
     * @param cer  证书的流, 既可以从资产目录里拿也可以设置成String,这里是一个名字。
     */
    public void setAssignCertificates(String cer){
        HttpsUtils.SSLParams sslParams= HttpsUtils.getSslSocketFactory(getAssignInputStreams(cer), null, null);
        mOkHttpClient.newBuilder().sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager)
                //其他配置
                .build();
        okHttpUtils.initClient(mOkHttpClient);
    }

-设置双向验证证书

  /**
     *  设置双向验证
     * @param cer  证书的inputstream
     * @param Mcer  本地证书的inputstream
     * @param psaaword 本地证书的密码
     */
    public void setBothwayCertificates(String cer,String Mcer,String psaaword){
        HttpsUtils.SSLParams sslParams= HttpsUtils.getSslSocketFactory(getAssignInputStreams(cer), getAssignInputStream(Mcer), psaaword);
        mOkHttpClient.newBuilder().sslSocketFactory(sslParams.sSLSocketFactory,sslParams.trustManager)
                //其他配置
                .build();
        okHttpUtils.initClient(mOkHttpClient);
    }

原生HttpClient 使用Https的代码 (以下代码只做参考)

 /**
     *
     * @param mUrl 访问的地址
     * @return  info
     */
   public   String requestHTTPSPage(String mUrl) {
        InputStream ins = null;
        String result = "";
        try {
            ins = context.getAssets().open("所在的.cer"); //下载的证书放到项目中的assets目录中
            CertificateFactory cerFactory = CertificateFactory
                    .getInstance("X.509");
            Certificate cer = cerFactory.generateCertificate(ins);
            KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
            keyStore.load(null, null);
            keyStore.setCertificateEntry("trust", cer);

            SSLSocketFactory socketFactory = new SSLSocketFactory(keyStore);
            Scheme sch = new Scheme("https", socketFactory, 443);
            HttpClient mHttpClient = new DefaultHttpClient();
            mHttpClient.getConnectionManager().getSchemeRegistry()
                    .register(sch);

            BufferedReader reader = null;
            try {
                Log.d(TAG, "executeGet is in,murl:" + mUrl);
                HttpGet request = new HttpGet();
                request.setURI(new URI(mUrl));
                HttpResponse response = mHttpClient.execute(request);
                if (response.getStatusLine().getStatusCode() != 200) {
                    request.abort();
                    return result;
                }

                reader = new BufferedReader(new InputStreamReader(response
                        .getEntity().getContent()));
                StringBuffer buffer = new StringBuffer();
                String line = null;
                while ((line = reader.readLine()) != null) {
                    buffer.append(line);
                }
                result = buffer.toString();
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                if (reader != null) {
                    reader.close();
                }
            }
        } catch (Exception e) {
            // TODO: handle exception
        } finally {
            try {
                if (ins != null)
                    ins.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
        return result;
    }

记录一下,以便以后用到,如能帮助到你,不胜荣幸,有疑问可以加我QQ 7641436 ,想要源代码可以留邮箱,或者是私信我。 没网就先不传了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值