[TOC]
描述:keytool是JDK中工具对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本
在使用之前我们先了解一些基础概念更能让我们了解此工具的用处:
SSL证书(SSL Certificates): 是HTTP明文协议升级HTTPS加密协议必备的数字证书,它在客户端(浏览器)与服务端(网站服务器)之间搭建一条安全的加密通道
,对两者之间交换的信息进行加密确保传输数据不被泄露或篡改(特别是在现在运营商流量分析手段-能采用https尽量采用
)。
CSR(Certificate Signing Request
): 即证书签名请求文件,是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件
,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件
,也就是颁发给用户的证书。
Q:如何生成CSR证书请求文件? 答:目前CSR生成工具非常多,比如 openssl工具 / keystore explore / XCA ,以及在线工具:https://myssl.com/csr_create.html
Q:CSR是什么样?Key又是什么样? 答:CSR是以-----BEGIN CERTIFICATE REQUEST-----
开头又以-----END CERTIFICATE REQUEST-----
为结尾的base64格式的编码; Key是以-----BEGIN RSA PRIVATE KEY-----
开头的又以-----END RSA PRIVATE KEY-----
结尾的,此处密钥算法采用的RSA当然您可以选择ecdsa 和 ed25519
CSR生成注意事项:
域名必须正确输入(如果是非SSL证书,则输入相应的通用名
)。
密钥算法选择RSA的话密钥长度需要2048bit以上(默认是2048没有特殊情况不要特殊设置
),ECC则是256bit以上。
摘要签名长度建议是sha2-256及以上
有CSR必定有KEY所以他们是成对的,在证书申请下来后需要与和私钥key配对使用(key必须加密保存好
)
CSR生命周期一览
[TOC]
描述:keytool是JDK中工具对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本
在使用之前我们先了解一些基础概念更能让我们了解此工具的用处:
SSL证书(SSL Certificates): 是HTTP明文协议升级HTTPS加密协议必备的数字证书,它在客户端(浏览器)与服务端(网站服务器)之间搭建一条安全的加密通道
,对两者之间交换的信息进行加密确保传输数据不被泄露或篡改(特别是在现在运营商流量分析手段-能采用https尽量采用
)。
CSR(Certificate Signing Request
): 即证书签名请求文件,是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件
,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件
,也就是颁发给用户的证书。
Q:如何生成CSR证书请求文件? 答:目前CSR生成工具非常多,比如 openssl工具 / keystore explore / XCA ,以及在线工具:https://myssl.com/csr_create.html
Q:CSR是什么样?Key又是什么样? 答:CSR是以-----BEGIN CERTIFICATE REQUEST-----
开头又以-----END CERTIFICATE REQUEST-----
为结尾的base64格式的编码; Key是以-----BEGIN RSA PRIVATE KEY-----
开头的又以-----END RSA PRIVATE KEY-----
结尾的,此处密钥算法采用的RSA当然您可以选择ecdsa 和 ed25519
CSR生成注意事项:
域名必须正确输入(如果是非SSL证书,则输入相应的通用名
)。
密钥算法选择RSA的话密钥长度需要2048bit以上(默认是2048没有特殊情况不要特殊设置
),ECC则是256bit以上。
摘要签名长度建议是sha2-256及以上
有CSR必定有KEY所以他们是成对的,在证书申请下来后需要与和私钥key配对使用(key必须加密保存好
)
CSR生命周期一览1 生成CSR/密钥 -> 提交证书颁发机构 -> 证书下发 -> 无需使用CSR仅提交时候需要
(1) CSR生成 注意:CSR是无法一步创建的需要先生成keystore在使用KeyTool工具时; Step1.创建密钥库keystore1 2 3 4 5 6 7 8 9 10 11 12 13 14 keytool -genkeypair \ -alias www.weiyigeek.top \ -keyalg RSA \ -keysize 2048 \ -keypass WeiyiGeekSSL \ -keystore server.jks \ -storetype JKS \ -storepass WeiyiGeekSSL \ -sigalg SHA256withRSA \ -dname "cn=www.weiyigeek.top,ou=IT,o=唯一极客,l=beijing,st=beijing,c=CN" \ -validity 365 keytool -genkeypair -alias www.weiyigeek.top -keyalg RSA -keysize 2048 -keypass WeiyiGeekSSL -keystore server.jks -storetype JKS -storepass WeiyiGeekSSL -sigalg SHA256withRSA -dname "cn=www.weiyigeek.top,ou=IT,o=唯一极客,l=beijing,st=beijing,c=CN" -validity 365
参数说明:
alias: 自定义别名此处我以自己域名为例,因一个证书库中可以存放多个证书
,通过别名标识证书常起作mykey。
keyalg: 密钥的算法可以选择的密钥算法有RSA、EC、ED
,不建议使用DSA密钥算法;
keysize: 密钥长度keysize与keyalg默认对应关系
,RSA-2048(最高4096bit并不是越长越高也要考虑非对称算法的运算开销
) / DSA-1024 / EC-256;
keypass: 密钥密码建议最好与storepass一致
keystore: 密钥库的名称默认在当前目录创建证书库
storetype: 证书库类型可选JKS(JDK8)、PKCS12(JDK9)
storepass: 证书库密码(私钥的密码)最好与keypass 一致
sigalg: 签名算法,当keyalg=RSA时有MD5withRSA、SHA1withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA
可供选择但是不建议选择MD5与SHA1签名算法,建议使用SHA256及以上的签名;
dname: “CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码”;
validity: 有效期此处”365“为证书有效期天数。
注意事项:
上述命令需要将 -dname 参数替换(尤其时域名要写对
)、密码更改即可,其它可保持不变。
Step2.利用得到JKS文件生成CSR文件1 2 3 4 5 6 7 8 9 10 keytool -certreq \ -keyalg RSA \ -alias www.weiyigeek.top \ -keystore server.jks \ -storetype JKS \ -storepass WeiyiGeekSSL \ -file www.weiyigeek.top.csr \ keytool -certreq -keyalg RSA -alias www.weiyigeek.top -keystore server.jks -storetype JKS -storepass WeiyiGeekSSL -file www.weiyigeek.top.csr
Step3.CSR需要提交私钥则存储在JKS文件中, 至此keytool方式的CSR生成完毕。1 2 3 [root@initiator tmp] -rw-r--r--. 1 root root 2.3K 4月 23 17:20 server.jks -rw-r--r--. 1 root root 1.1K 4月 23 17:24 www.weiyigeek.top.csr
补充说明:[2020-04-23 16:59:49]
(1) 主流的证书格式有PEM、DER、PFX、JKS、KDB、CER、KEY、CSR、CRT、CRL 、OCSP、SCEP
并且他们是可以相互装换的;
(2) JKS 密钥库使用专用格式建议使用下面的迁移到行业标准格式 PKCS12。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 $keytool -importkeystore -srckeystore server.jks -destkeystore server.jks -deststoretype pkcs12输入源密钥库口令: 已成功导入别名 www.weiyigeek.top 的条目。 已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消 Warning: 已将 "server.jks" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "server.jks.old" 进行了备份。 $keytool -list -v -keystore "server.jks" 输入密钥库口令: 密钥库类型: PKCS12 密钥库提供方: SUN 您的密钥库包含 1 个条目 www.weiyigeek.top, 2020-4-23, PrivateKeyEntry, 证书指纹 (SHA1): 72:E5:D9:48:1C:4D:4F:7D:AD:56:35:3D:FF:9B:3B:08:B4:A2:B3:45 $keytool -certreq -keyalg RSA -alias www.weiyigeek.top -keystore server.jks -storetype PKCS12 -storepass WeiyiGeekSSL -file www.weiyigeek.top.pkcs12.csr$keytool -delete -alias weiyigeek.top -keystore "server.jks" $keytool -exportcert -alias weiyigeek.top -keystore server.jks -file weiyigeek.top.cer -storepass WeiyiGeekSSL -rfc$keytool -list -rfc -keystore server.jks -storepass WeiyiGeekSSL | openssl x509 -inform pem -pubkey
(2) 密钥提取 描述:所谓JKS(Java Key Store)就是利用Java Keytool 工具生成的Keystore文件,JKS文件由公钥和密钥构成,其中的公钥就是我们所说的证书,即cer为后缀的文件,而私钥就是密钥,即以key为后缀的文件。
流程如下:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 $keytool -list -rfc -keystore server.jks -storepass WeiyiGeek.密钥库类型: jks 密钥库提供方: SUN 您的密钥库包含 1 个条目 别名: *****.weiyigeek.top 证书[1]: -----BEGIN CERTIFICATE----- keytool -importkeystore -srckeystore server.jks -destkeystore server.jks -deststoretype pkcs12 输入源密钥库口令: 已成功导入别名 *****.weiyigeek.top 的条目。 已完成导入命令: 1 个条目成功导入, 0 个条目失败或取消 已将 "server.jks" 迁移到 Non JKS/JCEKS。将 JKS 密钥库作为 "server.jks.old" 进行了备份。 keytool -v -importkeystore -srckeystore server.jks -srcstoretype pkcs12 -srcstorepass 123456 -destkeystore server.pfx -deststoretype pkcs12 -deststorepass 123456 -destkeypass WeiyiGeek. openssl pkcs12 -in server.pfx -nocerts -nodes -out server.key cat server.key
3.其它格式
1) 如果需要一个PFX格式的密钥文件(IIS中
),按照以下的说明将证书和私钥文件转换为一个.PFX文件
:1 openssl pkcs12 -export -out "certificate_combined.pfx" -inkey "private.key" -in "certificate.crt" -certfile ca_bundle.crt
2) 如果您需要PEM格式的私钥文件(Apache中
)1 openssl rsa -in private.key -text > private.pem