公司项目需要客户端证书验证,这里记录下客户端验证。
1.首先需要将crt、pem证书转换为BKS
需要jdk、keytool和openssl,没有请下载好并配置环境。
先转换为p12证书
openssl pkcs12 -export -in certificate.pem -inkey certificate.key -out certificate.p12 -name test
certificate.pem为你的证书路径,certificate.key为你的证书key路径,certificate.p12为你的p12证书生成路径。以上命令就可以生成一个p12证书;注意:转换提示你需要输入密码请记住你输入的密码。
p12转换为BKS证书
keytool -importkeystore -srckeystore certificate.p12 -srcstoretype pkcs12 -destkeystore certificate.bks -deststoretype bks -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk18on-172.jar
certificate.p12为你的p12证书路径,certificate.bks 是bks证书生成路径,bcprov-jdk18on-172.jar是转换为bks证书所需要的jar包路径。注意:转换提示你需要输入密码请记住你输入的密码。
bcprov-jdk下载
下载链接http://www.bouncycastle.org/latest_releases.html
bks证书在android中的使用
我们将生成好的bks证书放入assets目录中。
然后重写x509进行应用:
TrustManager[] tm = {x509mgr}; //服务端的证书验证重写x509实现
SSLContext sslContext = SSLContext.getInstance("TLS");
// 这里是客户端证书的处理流程 start
KeyManagerFactory keyManager = KeyManagerFactory.getInstance("X509");
KeyStore kks = KeyStore.getInstance("BKS");
kks.load(MyApplication.getInstance2().getAssets().open("certificate.bks"), "123456".toCharArray());
keyManager.init(kks, "123456".toCharArray());
// 这里是客户端证书的处理流程 end
sslContext.init(keyManager.getKeyManagers(), tm, new java.security.SecureRandom());
SSLSocketFactory ssf = sslContext.getSocketFactory();
“123456”.toCharArray()是你shell操作中输入的密码;
certificate.bks是你放入assets目录中的bks证书;