openssl
生成私钥
genrsa -out rsa_private_key.pem
生成公钥
rsa -in rsa_private_key.pem -pubout -out rsa_public_key.pem
生成JKS
keytool -genkey -alias jwt -keyalg RSA -keysize 1024 -keystore jwt.jks -validity 365
keytool -genkey -alias jwt -keyalg RSA -keysize 1024 -keystore jwt.jks -validity 365 -storepass 123456
//keytool -genkey -alias jwt -keyalg RSA -keysize 1024 -keystore jwt.jks -validity 365
// -alias <alias> 要处理的条目的别名
// -keyalg <keyalg> 密钥算法名称
// -keysize <keysize> 密钥位大小
// -sigalg <sigalg> 签名算法名称
// -destalias <destalias> 目标别名
// -dname <dname> 唯一判别名
// -startdate <startdate> 证书有效期开始日期/时间
// -ext <value> X.509 扩展
// -validity <valDays> 有效天数
// -keypass <arg> 密钥口令
// -keystore <keystore> 密钥库名称
// -storepass <arg> 密钥库口令
// -storetype <storetype> 密钥库类型
// -providername <providername> 提供方名称
// -providerclass <providerclass> 提供方类名
// -providerarg <arg> 提供方参数
// -providerpath <pathlist> 提供方类路径
// -v 详细输出
// -protected 通过受保护的机制的口令
如何从jks文件中导出公私钥
从JKS转换到PKCS12
keytool -importkeystore -srckeystore jwt.jks -destkeystore jwt.p12 -srcstoretype JKS -deststoretype PKCS12
**p12证书全称是PKCS#12(Public-Key Cryptography Standards:公钥加密标准)
p12证书包含了私钥、公钥并且有口令保护,在证书泄露后还有最后一道保障——证书口令,不知道正确的证书口令无法提取秘钥。
- 利用OpenSSL命令提取
提示输入证书口令后可得到原始秘钥rsa_origin.key,但仅有该秘钥是没用的,必须再从其中提取出公钥和私钥。
openssl pkcs12 -in jwt.p12 -nocerts -nodes -out rsa_origin.key
-
以RSA加密方式输出私钥
openssl rsa -in rsa_origin.key -out rsa_pkcs1.pem
此处注意,该秘钥为PKCS#1格式,在PHP下可直接使用,若为java环境,我们一般需要使用PKCS#8格式私钥,那么再来做一次转换。
openssl pkcs8 -topk8 -inform PEM -in rsa_pkcs1.pem -outform PEM -out rsa_private_pkcs8.pem -nocrypt
-
从原始秘钥提取RSA公钥
openssl rsa -in rsa_origin.key -pubout -out rsa_public_key.pem