Keytool依赖
keytool是JDK中工具,对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“为密钥的算法。可以选择的密钥算法有:RSA、EC、DSA。但一些CA已经不再颁发DSA类型的证书了
• –keysize 2048,密钥长度,下例中”2048“为密钥长度。keysize与keyalg默认对应关系: 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时,签名算法有:MD5withRSA、SHA1withRSA、SHA256withRSA、SHA384withRSA、SHA512withRSA。keyalg=DSA时,签名算法有:SHA1withDSA、SHA256withDSA。此处需要注意:MD5和SHA1的签名算法已经不安全,虽然目前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 “为证书库类型。可用的证书库类型为:JKS、PKCS12等。jdk9以前,默认为JKS。自jdk9开始,默认为PKCS12。
• -storepass changeit 此处”changeit“为证书库密码(私钥的密码)。最好与keypass 一致。
说明: 上述命令,需要将 -dname 参数替换(尤其时域名要写对)、密码更改即可,其它可保持不变。
创建
得到 server.jks
生成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生成完毕。