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

上一篇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通信。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容