Keytool依赖

keytoolJDK中工具,对JDK版本要求不高,但基于现在JDK版本的安全性考虑,建议使用JDK8及以上版本

 

CSR生成

CSR是无法一步创建的,需要先生成keystore

创建密钥库keystore

例:keytool -genkeypair -alias www.trustasia.com -keyalg RSA -keysize 2048 -keypass changeit -sigalg SHA256withRSA -dname "cn=www.trustasia.com,ou=IT,o=亚数信息科技,l=shanghai,st=shanghai,c=CN" -validity 365 -keystore server.jks -storetype JKS -storepass changeit

          keytool jdk提供的工具,该工具名为”keytool“

          -alias www.trustasia.com 自定义别名,下例中www.trustasia.com为别名,可以是任意字符,只要不提示错误即可。因一个证书库中可以存放多个证书,通过别名标识证书。常起作mykey

          -keyalg RSA 此处”RSA“为密钥的算法。可以选择的密钥算法有:RSAECDSA。但一些CA已经不再颁发DSA类型的证书了

          –keysize 2048,密钥长度,下例中”2048“为密钥长度。keysizekeyalg默认对应关系:  2048 (when using -genkeypair and -keyalg is “RSA”)  1024 (when using -genkeypair and -keyalg is “DSA”)  256 (when using -genkeypair and -keyalg is “EC”)

            密钥长度一般RSA支持最低2048bit,最高4096bit,并不是越长越高,也要考虑非对称算法的运算开销

            ECC算法默认256bit

          -keypass changeit 密钥对的密码,此处”changeit“为本条目的密码(私钥的密码)。最好与storepass一致。

-sigalg SHA256withRSA 此处”SHA256withRSA“为签名算法。keyalg=RSA时,签名算法有:MD5withRSASHA1withRSASHA256withRSASHA384withRSASHA512withRSAkeyalg=DSA时,签名算法有:

          SHA1withDSASHA256withDSA。此处需要注意:MD5SHA1的签名算法已经不安全,虽然目前CA接受这些不安全算法,但建议使用SHA256及以上的签名

          -dname "cn=www.trustasia.com,ou=IT,o=亚数信息科技,l=shanghai,st=shanghai,c=CN" 在此填写证书信息。”CN=名字与姓氏/域名,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码

          -validity 有效期, 此处”365“为证书有效期天数。

          -keystore server.jks 此处”server.jks“为密钥库的名称。此处也给出绝对路径。默认在当前目录创建证书库。

          -storetype JKS 此处”JKS “为证书库类型。可用的证书库类型为:JKSPKCS12等。jdk9以前,默认为JKS。自jdk9开始,默认为PKCS12

          -storepass changeit 此处”changeit“为证书库密码(私钥的密码)。最好与keypass 一致。

说明:  上述命令,需要将 -dname 参数替换(尤其时域名要写对)、密码更改即可,其它可保持不变。

创建

image.png 

得到

image.png

生成CSR文件

keytool -certreq -keyalg RSA -alias www.trustasia.com -keystore server.jks -storetype JKS -storepass changeit -file www.trustasia.com.csr

          -file www.trustasia.com.csr 是生成得到CSR文件。

CSR需要提交,私钥则存储在JKS文件中。至此,keytool方式的CSR生成完毕。