协议及开发语言、证书工具介绍
以下证书标准格式主要阐述了java&android及openssl支持的证书格式协议,可通过协议标准互转。
标准/格式 | 说明 | 主流开发语言支持的工具 |
PKCS1 | openssl默认生成的标准 | Openssl |
PKCS8 | Java支持的证书标准 | Java,openssl |
PKCS12 | 同时支持私钥和公钥的标准 | Java,openssl |
DER | 浏览器默认证书格式,ASN.1原生文件格式 | JAVA,openssl |
PEM | Openssl制定的以base64内容转码DER的文件格式 | Java,openssl |
Jks | Java key store | Java |
Bks | Android key store | Java |
常用工具支持的协议介绍
目前按照市场上流行的证书文件格式。
- openssl支持pkcs8和pkcs12,所以可以和java key tool之间互相转
- Android BKS本身基于Java Key tool,可以和key store互相转,间接的跟openssl也可以互相转
工具 | 格式 | 支持协议或标准 |
Openssl | Pem | Pkcs1,pkcs8,pkcs12,pkcs7 |
Java key tool | Jks,keystore | Pkcs8, pkcs 12 |
Android | Bks | 基于java key tool |
协议互转
协议和格式是可以互相转换的,如下
转换 | 说明 | 方式 |
Der – PEM | 通常是签发的X509数字证书格式转换 | Openssl x509 –in ./file –inform PEM –out out.der -outform DER Openssl x509 –in ./file –inform DER –out out.PEM -outform PEM |
PKCS1 – PKCS8 | 通常转换是为了让java可读取识别 | 这个稍微复杂,分pkcs8私钥转pkcs1私钥,Pkcs1私钥转pkcs8公钥,公钥同上,还按照不同加密算法(ecc,rsa) openssl的命令也不同 |
Key&cer – pkcs12 | 通常打包私钥和公钥做成p12文件,或反之 | 可使用Openssl pkcs12命令 |
Pkcs7 – DER/PEM | 通常导出p7b文件的证书 | 可使用Openssl pkcs7命令 |
PKCS12 -- keystore | 通常用于夸语言提供pkcs12转java keystore,反之的话,就是导出p12 | Pkcs12转keystore: keytool -importkeystore -destkeystore client_keystore.jks -deststoretype jks -deststorepass 123456 -srckeystore client.p12 -srcstoretype pkcs12 -srcstorepass 123456 Keystore转pkcs12: keytool -importkeystore -srckeystore keystore -destkeystore client_keystore.p12 -srcstoretype JKS -deststoretype PKCS12 -srcstorepass password -deststorepass password -srcalias server -destalias xxx -srckeypass password -destkeypass password -noprompt |
PKCS12 – bks | 其实操作跟keystore一样,不过要借助一个第三方插件,bks格式就是bouncycastle的证书解决android证书,keystore与bks性质一样,只是在用keytool的时候需制定provider,同时存储类型为BKS,当然还得制定provider的jar,去BC官网去下载就行 | keytool -importkeystore -destkeystore client_keystore.jks -deststoretype BKS -deststorepass 123456 -srckeystore client.p12 -srcstoretype pkcs12 -srcstorepass 123456 -provider org.bouncycastle.jce.provider.BouncyCastleProvider -providerpath bcprov-jdk16-141.jar |
RSA证书的pkcs1 pkcs8互转,EC请使用EC指令,或者pkcs8指令
1.pkcs8私钥 转pkcs1 私钥
openssl rsa -in demo_pkcs8.pem -out demo_pkcs1.pem
2.PKCS1 私钥转换为 PKCS8 私钥
openssl pkcs8 -topk8 -inform PEM -in demo_private.pem -outform pem -nocrypt -out demo_pcs8.pem
3.从 pkcs1 私钥中生成 pkcs8 公钥
openssl rsa -in demo _private.pem -pubout -out demo_public.pem
4.pkcs8 私钥中导出 pkcs8 公钥
openssl rsa -in demo_pcs8 pem -pubout -out demo_public_pkcs8.pem
5.pkcs8 公钥转 pkcs1公钥
openssl rsa -pubin -in demo_public.pem -RSAPublicKey_out
6.pkcs1公钥转换为pkcs8公钥
openssl rsa -RSAPublicKey_in -in pub_pkcs1.pem -pubout
小结
- 如果openssl生成的证书需转pkcs12,再用java keytool去转成keystore
- 如果是android,用keytool的时候指定provider、存储类型及jar,再转成BKS
- 反向的keystore转成openssl支持的pkcs12证书,命令类似。
- 其他的几乎openssl都能转换,熟练使用目前流行的证书工具可以帮助实现证书夸平台使用。