java 自制Tomcat Andorid IOS 端 证书
最近做项目用到Https 需要自制各种证书,Tomcat 用的JKS 格式, Andorid 端使用 BKS 格式, IOS 端使用 P12格式正式, 以及各种证书格式之间的转换。 正好研究了一下,记录下来,以便以后查阅。
1> 系统:win7
2> JDK 版本: JDK 1.6
3> 制作步骤:
3.1> keytool 主要参数说明
-genkey表示要创建一个新的密钥<br/> -dname表示密钥的Distinguished Names,<br/> CN=commonName<br/> OU=organizationUnit<br/> O=organizationName<br/> L=localityName<br/> S=stateName<br/> C=country<br/> Distinguished Names表明了密钥的发行者身份<br/> -keyalg使用加密的算法,这里是RSA<br/> -alias密钥的别名<br/> -keypass私有密钥的密码,这里设置为changeit<br/> -keystore 密钥保存在D:盘目录下的mykeystore文件中<br/> -storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出<br/> -validity该密钥的有效期为 天 (默认为90天)
3.2> 制作Tomcat 端 JKS 格式正式
keytool -genkey -alias tomcat -keyalg RSA -keystore d:\tomcat.jks -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass password -storepass password -validity
注:生成证书时,CN要和服务器的域名相同,如果在本地测试,则使用localhost)
3.3> JKS –> CER
keytool -exportcert -alias tomcat -file D:\server.cer -keystore D:\tomcat.jks
3.4> Andorid 端 BKS 格式证书
制作Andorid 端 BKS 格式证书,需要下载支持BKS 格式证书的 Java security jar
3.4.1> 下载 bcprov-jdk16-141.jar
3.4.2> 将下载好的 jar 拷贝到 jdk\jre\lib\ext 下面
3.4.3> 配置 bcprov 支持
在 JDK_HOME\jre\security\ 目录下编辑 java.security文件, 添加对bcprov 的支持(数字可以自己定义)
security.provider.11=org.bouncycastle.jce.provider.BouncyCastleProvider
3.5> CER –> BKS
keytool -importcert -keystore D:\andorid.bks -file E:\server.cer -storetype BKS -provider org.bouncycastle.jce.provider.BouncyCastleProvider
3.6> IOS 端 JKS –> P12
keytool -importkeystore -srckeystore D:\tomcat.jks -srcstoretype JKS -deststoretype PKCS12 -destkeystore D:\ios.p12
3.7> P12 –> JKS
keytool -importkeystore -srckeystore D:\ios.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore D:\ios_tomcat.jks
3.8> key&cet –> pfx
openssl pkcs12 -export -in client.crt -inkey client.key -out client.pfx
3.9> pfx –> jks
keytool -importkeystore -srckeystore mycert.pfx -destkeystore mycert.jks -srcstoretype PKCS12 -deststoretype JKS
openssl 证书格式转换
PEM–DER/CER(BASE64–DER编码的转换)
openssl x509 -outform der -in certificate.pem -out certificate.der
PEM–P7B(PEM–PKCS#7)
openssl crl2pkcs7 -nocrl -certfile certificate.cer -out certificate.p7b -certfile CACert.cer
PEM–PFX(PEM–PKCS#12)
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
CER/DER–PEM(编码DER–BASE64)
openssl x509 -inform der -in certificate.cer -out certificate.pem
P7B–PEM(PKCS#7–PEM)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer
P7B–PFX(PKCS#7–PKCS#12)
openssl pkcs7 -print_certs -in certificate.p7b -out certificate.cer<br/> openssl pkcs12 -export -in certificate.cer -inkey privateKey.key -out certificate.pfx -certfile CACert.cer
PFX/p12–PEM(PKCS#12–PEM)
openssl pkcs12 -in certificate.pfx -out certificate.cer
PEM BASE64–X.509文本格式
openssl x509 -in Key.pem -text -out Cert.pem
PFX文件中提取私钥(.key)
openssl pkcs12 -in mycert.pfx -nocerts -nodes -out mycert.key
PEM–SPC
openssl crl2pkcs7 -nocrl -certfile venus.pem -outform DER -out venus.spc
PEM--PVK(openssl 1.x开始支持)
openssl rsa -in mycert.pem -outform PVK -pvk-strong -out mypvk.pvk