使用keytool 生成证书


keytool 简介
keytool 是java 用于管理密钥和证书的工具
其功能包括:
创建并管理密钥
创建并管理证书
作为CA 为证书授权
导入导出证书
主要格式
keytool 采用 keystore 文件来存储密钥及证书,其中可包括私钥、信任证书;
keystore 文件主要使用 JKS格式(也可支持其他格式),带密钥存储;其中私钥的存储也有独立的密码;

一、生成私钥和证书
keytool -genkeypair -alias serverkey -keypass 123456 -storepass 123456 \
    -dname "C=cn,ST=gd,L=gz,O=gz,OU=gz,CN=xx.com" \
    -keyalg RSA -keysize 2048 -validity 3650 -keystore server.keystore
参数说明
storepass keystore 文件存储密码
keypass 私钥加解密密码
alias 实体别名(包括证书私钥)
dname 证书个人信息
keyalt 采用公钥算法,默认是DSA
keysize 密钥长度(DSA算法对应的默认算法是sha1withDSA,不支持2048长度,此时需指定RSA)
validity 有效期
keystore 指定keystore文件
二、查看keystore详情
keytool -list -v -keystore server.keystore -storepass 123456

三、证书导入导出
导出证书(DER编码格式)
keytool -exportcert -keystore server.keystore -file server.cer -alias serverkey -keypass 123456 -storepass 123456>
使用openssl 查看
openssl x509 -in server.cer -inform der -noout -text

导出证书(PEM编码格式)
keytool -exportcert -keystore server.keystore -rfc -file server.pem -alias serverkey -keypass 123456 -storepass 123456
查看证书
keytool -printcert -file server.cer/server.pem

导入证书
keytool -noprompt -importcert -keystore client_trust.keystore -file server.cer -alias client_trust -keypass 123456 -storepass 123456

四、转换格式
jks格式 转 pkcs12

keytool -importkeystore -srckeystore server.keystore -destkeystore server.p12 -srcalias serverkey -destalias serverkey \
    -srcstoretype jks -deststoretype pkcs12 -srcstorepass 111111 -deststorepass 111111 -noprompt
参数说明

importkeystore 指示导入导出keystore文件,可用于同类型或不同类型的导入导出
srckeystore 指示源keystore文件
srcalias 指示源实体别名
srcstoretype 指示源store类型(jks/pkcs12..)
srcstorepass 指示源store密码
noprompt 不弹出提示
pkcs12 转jks格式与此同理

六、场景示例

Nginx 证书 转 JKS

A pem证书和私钥合成p12

openssl pkcs12 -export -in server.crt -inkey server.key -passin pass:111111 -password pass:111111 \
-name server -out server.p12
注意定义-name 选项,这将作为keystore识别实体的参数
B p12 证书转jks 证书

keytool -importkeystore -srckeystore server.p12 -destkeystore server.keystore \
-srcstoretype pkcs12 -deststoretype jks -srcalias server -destalias server \
-deststorepass 111111 -srcstorepass 111111
如果p12 文件中未指定实体名称,使用keytool转换时则不需提供srcalias/destalias参数,而输出的keystore实体名称默认为1

JKS 证书 转 Nginx证书

A jks 证书转p12

keytool -importkeystore -srckeystore server.keystore  -destkeystore server.p12 \
-srcstoretype jks -deststoretype pkcs12 -srcalias server -destalias server \
-deststorepass 111111 -srcstorepass 111111
B p12 证书提取pem证书和私钥

openssl pkcs12 -in server.p12 -clcerts -nokeys -password pass:111111 -out server.crt
openssl pkcs12 -in server.p12  -nocerts -password pass:111111 -passout pass:111111 -out server.key
其中得到的私钥文件为PKCS#8 加密格式,证书和密钥均为PEM文件编码。