上一篇Android開發(fā)之基于Netty的TCP連接中使用SSL加密提到需要加載jks格式的證書來構(gòu)建SSLContext
竟坛。實際上在Android中是無法使用jks證書的。Android 系統(tǒng)中使用的證書要求是bks格式。
一般來說,我們使用jdk的keytool只能生成jks的證書庫,如果生成bks的則需要下載BouncyCastle庫咐蚯。
搜集了各方資料,整理了以下如何將服務(wù)端提供的crt格式證書轉(zhuǎn)換成Android上使用的bks證書蜓斧。
1 Introduction
JKS和JCEKS是Java密鑰庫(KeyStore)的兩種比較常見類型,JKS的Provider是SUN睁冬,在每個版本的JDK中都有挎春。
BKS來自BouncyCastleProvider看疙,它使用的也是TripleDES來保護(hù)密鑰庫中的Key,它能夠防止證書庫被不小心修改(Keystore的keyentry改掉1個bit都會產(chǎn)生錯誤)直奋,BKS能夠跟JKS互操作能庆。
2 Steps
要生成bks證書,需要bcprov-ext-jdk15on-151.jar(下載地址)脚线。且將該文件放到
Java\jdk1.8.0_20\jre\lib\ext
目錄下搁胆。我們的后端同事提供了自簽名的服務(wù)器證書server.crt,我們需要把這個server.crt轉(zhuǎn)換成Android系統(tǒng)的bks格式證書邮绿。使用以下命令行:
keytool -importcert -trustcacerts -keystore e:\key.bks -file e:\server.crt -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
按照提示重復(fù)輸入兩次密碼(在Java的KeyStore
對象加載證書時會用到這個密碼渠旁。),然后就成功將E:\目錄下的server.crt轉(zhuǎn)成key.bks證書船逮。
- 把證書復(fù)制到Android項目的asset目錄中顾腊,參考上篇文章即可實現(xiàn)單向的SSL加密TCP通信。