通过jdk自带的keytool工具生成密钥对

本文章的思路,下面从几方面进行讲解:

  • 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密钥位数。在此执行我们的上述命令便不会有上述的问题了。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以按照以下步骤使用 keytool 工具生成自签名的 SSL 证书: 1. 打开命令行窗口,并导航到 JDK 的 bin 目录下。 2. 输入以下命令以生成 SSL 证书: ```bash keytool -genkey -alias mydomain -keyalg RSA -keystore keystore.jks -keysize 2048 ``` 其中,`mydomain` 是证书别名,`keystore.jks` 是证书库的名称。 3. 在运行上述命令后,会提示输入一些信息,如下所示: ```bash What is your first and last name? [Unknown]: example.com What is the name of your organizational unit? [Unknown]: IT What is the name of your organization? [Unknown]: Example Corp What is the name of your City or Locality? [Unknown]: Anytown What is the name of your State or Province? [Unknown]: CA What is the two-letter country code for this unit? [Unknown]: US Is CN=example.com, OU=IT, O=Example Corp, L=Anytown, ST=CA, C=US correct? [no]: yes Enter key password for <mydomain> (RETURN if same as keystore password): ``` 按照提示输入相关信息,其中 `CN`(Common Name)应该与您的域名相匹配。 4. 然后,系统会提示输入密钥库密码和密钥密码。这两个密码应该是不同的。如果您希望两个密码相同,可以按回车键跳过第二个密码的设置。 5. 生成证书后,可以使用以下命令查看证书的详细信息: ```bash keytool -list -v -keystore keystore.jks ``` 这将输出证书的详细信息,包括证书别名、证书类型、证书序列号、颁发者、有效期等。 6. 最后,将生成的证书用于您的应用程序中。 注意:在生产环境中,应该使用受信任的第三方机构颁发的证书。这些证书可以通过购买或免费获取。自签名的证书仅适用于开发和测试环境。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值