本文章的思路,下面从几方面进行讲解:
- 1.keytool生成密钥对执行命令
- 2.keytool生成密钥对不同环境下的区别
- 3.keytool常用选项意义
- 4.keytool生成密钥对过程中常见问题讲解
1.keytool生成密钥对执行命令
在cmd命令执行
keytool -genkeypair -keysize 1024 -validity 3650 -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -keypass "private_password1234" -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN"
# 导出命令
keytool -exportcert -alias "privateKey" -keystore "privateKeys.keystore" -storepass "public_password1234" -file "certfile.cer"
#导入命令
keytool -import -alias "publicCert" -file "certfile.cer" -keystore "publicCerts.keystore" -storepass "public_password1234"
2.keytool生成密钥对不同环境下的区别
首先keytool是在JDK1.4以上版本中包含了这一工具,它的位置为:<JDK根目录>\bin\keytool.exe
对于jdk1.4和jdk1.5的我们可以使用-genkey来生成密钥对,1.6及以上的可以使用-genkey和-genkeypair,量着区别不大但是建议使用上述的-genkeypair。一下是通过genkey生成的密钥对的命令
1、首先要用 KeyTool 工具来生成私匙库:(-alias别名 -validity 3650 表示10年有效)
keytool -genkey -alias privatekey -keysize 1024 -keystore privateKeys.store -validity 3650
2、然后把私匙库内的证书导出到一个文件当中
keytool -export -alias privatekey -file certfile.cer -keystore privateKeys.store
3、然后再把这个证书文件导入到公匙库
keytool -import -alias publiccert -file certfile.cer -keystore publicCerts.store
3.keytool常用选项意义
4.keytool生成密钥对过程中常见问题讲解
对于jdk1.8版本的我在使用中遇到了关于类型的问题与大家分享一下。
4.1警告: PKCS12 密钥库不支持其他存储和密钥口令。正在忽略用户指定的-keypass值。
上述问题不会影响我们生成私钥文件,但是在后期验证时会造成各种错误。再讲解这个问题之前先跟科普一下,我们在生成常用的密钥库类型有PKCS12、JKS;在正常的情况下推荐使用PKCS12。在网上找了相关的区别想要了解的可以看一下。
具体区别: PKCS12:PKCS12是一种通用的密钥库格式,它可以存储多个私钥、公钥和证书。它通常使用.p12或.pfx作为文件扩展名。 JKS:JKS是Java特定的密钥库格式,由Java开发并广泛用于Java应用程序。它可以存储私钥,公钥和证书。它使用.jks作为文件扩展名。 密钥口令: PKCS12:PKCS12密钥库支持为每个私钥对设置单独的密钥口令,这意味着您可以为每个密钥对设置不同的密码。 JKS:JKS密钥库不支持为每个私钥对设置单独的密钥口令,它使用一个密码来保护整个密钥库中的所有密钥和证书。 可移植性: PKCS12:PKCS12是一种通用的密钥库格式,广泛支持各种平台和应用程序。因此,PKCS12格式的密钥库在不同的系统和应用之间更易于导入和导出。 JKS:JKS是Java特定的密钥库格式,主要用于Java应用程序。它在其他非Java平台上的支持可能有限。 对于大多数情况下,如果您的应用程序是基于Java的,建议使用JKS格式的密钥库。如果您需要与其他非Java系统进行交互或导入/导出密钥库, 则可以考虑使用PKCS12格式的密钥库。
了解了密钥库类型后,回到上述的问题。上述问题产生的原因是因为创建密钥的引导窗口是按照jks格式的创建模板提供的表单,但实际我们创建出来的文件是p12格式的(具体原因不明),而p12只有storepass属性,没有keypass,因此我们填入的keypass将不会生效,签名的时候也会无法正常按照我们创建时填写的keypass来读取我们的密钥。解决这个问题的思路通过转换私钥的格式为pkcs12,执行如下命令
keytool -importkeystore -srckeystore privateKeys.keystore -destkeystore privateKeys.keystore -deststoretype pkcs12
4.2Warning:<privatekey> uses a 1024 位 DSA 密钥 which is considered a security risk. This key size will be disabled in a future update.
根据上述提示内容可以知道:“使用1024位DSA密钥被认为是一种安全风险。此密钥大小将在将来的更新中禁用”
要解决上述问题,提高安全性,我们可以升级密钥位数,其中2048和3072都是常用的RSA密钥位数。在此执行我们的上述命令便不会有上述的问题了。