美文网首页Android网络请求开源库Android知识程序员
Android中SSL通信中使用的bks格式证书的生成

Android中SSL通信中使用的bks格式证书的生成

作者: 天才木木 | 来源:发表于2016-08-24 00:02 被阅读6002次

    上一篇Android开发之基于Netty的TCP连接中使用SSL加密提到需要加载jks格式的证书来构建SSLContext实际上在Android中是无法使用jks证书的。Android 系统中使用的证书要求是bks格式
    一般来说,我们使用jdk的keytool只能生成jks的证书库,如果生成bks的则需要下载BouncyCastle库。
    搜集了各方资料,整理了以下如何将服务端提供的crt格式证书转换成Android上使用的bks证书。

    1 Introduction

    JKS和JCEKS是Java密钥库(KeyStore)的两种比较常见类型,JKS的Provider是SUN,在每个版本的JDK中都有。
    BKS来自BouncyCastleProvider,它使用的也是TripleDES来保护密钥库中的Key,它能够防止证书库被不小心修改(Keystore的keyentry改掉1个bit都会产生错误),BKS能够跟JKS互操作。

    2 Steps

    1. 要生成bks证书,需要bcprov-ext-jdk15on-151.jar下载地址)。且将该文件放到Java\jdk1.8.0_20\jre\lib\ext目录下。

    2. 我们的后端同事提供了自签名的服务器证书server.crt,我们需要把这个server.crt转换成Android系统的bks格式证书。使用以下命令行:

    keytool -importcert -trustcacerts -keystore e:\key.bks -file e:\server.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
    

    按照提示重复输入两次密码(在Java的KeyStore对象加载证书时会用到这个密码。),然后就成功将E:\目录下的server.crt转成key.bks证书。

    1. 把证书复制到Android项目的asset目录中,参考上篇文章即可实现单向的SSL加密TCP通信。

    相关文章

      网友评论

      • xmliu:感谢分享
      • 安卓求职:请问命令行的那部分为什么看不到了?
        天才木木:已修改文章,可以看到了
      • 你好_ddb0:博主,请问android端用到到底是cer还是bks格式的证书啊,这里一直没搞明白
        冰红儿茶:@你好_ddb0 感觉有一万种实现方式,每个人都在说自己的方式,加油吧。
        你好_ddb0:@冰红儿茶 我也是,不知道到底是后台的问题还是我这边接口的问题,搞得尽力交猝。自己生成的证书有jks格式,然后可以直接生成cer,但是服务器现在一开始给我都不是这两个形式,后来给我转了个bks格式,搞不明白了
        冰红儿茶:我也很纳闷,被一堆跟证书叶证书密钥什么的搞得头大,不过目前写的demo里面用12306测试,代码里用的cer证书是可以的,代码里也没有什么bks、、、、
      • a0861496e565:BKS里面存储的到底是密钥还是证书?还是两者都有
        a0861496e565:@牧码人Coder 了解了,谢谢
        牧码人Coder:应该是证书包含了公钥,同时证书中还有其他的信息(比如:姓名,公司......),BKS只是证书的一种格式

      本文标题:Android中SSL通信中使用的bks格式证书的生成

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