美文网首页安卓开发
安卓https双向认证(xutils3)

安卓https双向认证(xutils3)

作者: 夜封雪 | 来源:发表于2018-01-10 15:49 被阅读83次

1、先上代码


private static final StringKEY_STORE_TYPE_BKS ="bks";//证书类型 固定值

private static final StringKEY_STORE_TYPE_P12 ="PKCS12";//证书类型 固定值

private static final StringKEY_STORE_CLIENT_PATH ="client.p12";//客户端要给服务器端认证的证书

private static final StringKEY_STORE_TRUST_PATH ="server.p12";//客户端验证服务器端的证书库

private static final StringKEY_STORE_PASSWORD ="123456"客户端证书密码

private static final StringKEY_STORE_TRUST_PASSWORD ="123456";//客户端证书库密码

/**

* 获取Https的证书

*

* @param context Activity(fragment)的上下文

* @return SSL的上下文对象

*/

private static SSLContextgetSSLContext(Context context) {

try {

// 服务器端需要验证的客户端证书

        KeyStore keyStore = KeyStore.getInstance(KEY_STORE_TYPE_P12);

        // 客户端信任的服务器端证书

        KeyStore trustStore = KeyStore.getInstance(KEY_STORE_TYPE_BKS);

        InputStream ksIn = context.getResources().getAssets().open(KEY_STORE_CLIENT_PATH);

        InputStream tsIn = context.getResources().getAssets().open(KEY_STORE_TRUST_PATH);

        try {

keyStore.load(ksIn, KEY_STORE_PASSWORD.toCharArray());

            trustStore.load(tsIn, KEY_STORE_TRUST_PASSWORD.toCharArray());

        }catch (Exception e) {

e.printStackTrace();

        }finally {

try {

ksIn.close();

            }catch (Exception ignore) {

}

try {

tsIn.close();

            }catch (Exception ignore) {

}

}

SSLContext sslContext = SSLContext.getInstance("TLS");

        TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());

        trustManagerFactory.init(trustStore);

        KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance("X509");

        keyManagerFactory.init(keyStore, KEY_STORE_PASSWORD.toCharArray());

        sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), null);

        return sslContext;

    }catch (Exception e) {

BNLog.e("tag", e.getMessage(), e);

    }

return null;

}

说明:

client.p12, 这是客户端证书

server.p12, 这是服务端证书

其余的代码就不解释了,都是固定的。

问题:android load BKS error: wrong version of key store

按照字面的意思是:安卓加载BKS错误:版本问题

首先,你必须知道BKS是什么,它是证书的一种类型。

而且,我们在debug中也可以轻松的找到问题出现的具体代码位置

综上,也就可以看出是服务端的证书库类型是非bks类型

接下来就简单了,类型不匹配,那就装换一下咯

我在这里用到了这个工具

用法:

打开类型不正确的证书文件 这里需要输入密码 密码校验成功后会出现这个界面 选择BKS-V1后保存就OK了

注意事项

1、Javax.net.ssl.SSLHandshakeException: javax.net.ssl.SSLProtocolException: SSL handshake aborted: Failure in SSL library, usually a protocol error

出现这个问题呢,是因为代码问题,请参照上文代码,可以直接复制

2、安卓系统版本兼容问题,我这里暂未考虑。

3、如有错误,请指出。

代码参照这位老板的:http://blog.csdn.net/u012874222/article/details/50339259

他写的十分详细,我这里只是简单的叙述一下。建议看一看。

咳咳,会不会侵权,哈哈,如有请指出。

相关文章

  • 安卓https双向认证(xutils3)

    1、先上代码 private static final StringKEY_STORE_TYPE_BKS ="bk...

  • Android 项目https网络请求封装及遇到的一些问题

    因为最近ios需要用到https,所以公司的项目都从http的请求转成了https的双向认证,这里我关于安卓端ht...

  • 安卓双向认证逆向

    近期工作中发现了一个双向认证的app,特此记录一下。 上图为抓包结果,这是一个GET请求,当不加代理的时候是可以访...

  • https双向认证

    一、运行环境 win7_64studio3.1.3IDEA2017.3JDK1.8Sprint Boot 2.0....

  • HTTPS双向认证

    双向认证,顾名思义,客户端和服务器端都需要验证对方的身份,在建立HTTPS连接的过程中,握手的流程比单向认证多了几...

  • https双向认证 CA认证

    CA证书认证:http://blog.csdn.net/langeldep/article/details/548...

  • Https 单向认证 双向认证

    一、Http HyperText Transfer Protocol,超文本传输协议,是互联网上使用最广泛的一种协...

  • HTTPS 单向认证、双向认证

    1.是谁配置单向还是双向?由服务器容器配置 单向认证流程:1.客户端say hello 服务端2.服务端将证书、公...

  • iOS HTTPS 双向认证

    iOS HTTPS 双向认证 @(iOS)[网络,HTTPS] 搞了半天,记录一下,坑很多。双向认证,就是在访问网...

  • Https单双向认证

    之前与某运营商渠道对接口,对方弄了一个https双向认证,项目非常着急,当时我对https一点概念都没有。 现在平...

网友评论

  • StevenCheuk:你好,请问客户端证书和服务器证书是怎么生成的?
    夜封雪:抱歉,这个我就不大清楚了,不过应该是申请来的吧

本文标题:安卓https双向认证(xutils3)

本文链接:https://www.haomeiwen.com/subject/qzyonxtx.html