keytool命令详解

keytool 是一个用于管理密钥和证书的Java命令行工具。它通常用于创建和管理Java Keystores (JKS),生成密钥对和证书请求,导入和导出证书,以及查看密钥库的内容。keytool 是Java开发人员和系统管理员在处理SSL/TLS证书和数字签名时的重要工具。

基本概念

  • Keystore: 存储密钥和证书的数据库,可以是JKS(Java Keystore)、PKCS12等格式。
  • 私钥 (Private Key): 用于加密数据或创建数字签名,必须保密。
  • 公钥 (Public Key): 用于解密数据或验证数字签名,通常与私钥成对存在。
  • 证书 (Certificate): 证明公钥身份的文件,通常由证书颁发机构 (CA) 签发

常用命令

  1. 创建一个新的 Keystore 并生成密钥对
    • 创建一个包含自签名证书的新的 Java Keystore:
keytool -genkeypair -alias mykey -keyalg RSA -keysize 2048 -keystore mykeystore.jks -validity 365

keytool -genkeypair -alias <别名> -keyalg RSA -keysize 2048 -validity <有效天数> -keystore <密钥库路径> -storepass <密钥库密码> -keypass <密钥密码> -dname "CN=名字,OU=单位,O=组织,L=城市,ST=省份,C=国家"
  • -alias mykey:为密钥对创建一个别名。
  • -keyalg RSA:使用 RSA 算法生成密钥对。
  • -keysize 2048:指定密钥长度为 2048 位。
  • -keystore mykeystore.jks:指定生成的 keystore 文件名。
  • -validity 365:证书有效期为 365 天。
  1. 查看 Keystore 内容
    • 列出 keystore 中包含的所有条目(密钥对和证书)(如果需要更详细的输出,可使用 -v)
keytool -list -keystore mykeystore.jks
#详细输出
keytool -list -v -keystore mykeystore.jks

keytool -list -keystore <密钥库路径> -storepass <密钥库密码>
  1. 导出公钥证书
    • 从 keystore 中导出证书(公钥部分),通常是为了分发给其他人或提交给证书颁发机构 (CA)
keytool -exportcert -alias mykey -keystore mykeystore.jks -file mykey.crt

keytool -exportcert -alias <别名> -keystore <密钥库路径> -file <导出的证书文件路径> -storepass <密钥库密码>
  1. 导入证书到 Keystore
    • 将一个 CA 签发的证书导入到 keystore 中
    • 如果导入的证书是信任链的一部分,可能需要先导入根证书和中间证书
    • 指定文件中的证书导入到密钥库中,并以指定的别名存储
keytool -importcert -alias mykey -file mykey.crt -keystore mykeystore.jks

keytool -importcert -alias <别名> -file <证书文件路径> -keystore <密钥库路径> -storepass <密钥库密码>
  1. 生成证书签名请求 (CSR)
    • 生成一个证书签名请求,以提交给 CA 颁发正式证书
keytool -certreq -alias mykey -keystore mykeystore.jks -file mykey.csr
  1. 导入 CA 签名的证书回复
    • 在提交 CSR 后,CA 会返回签名的证书,使用以下命令将其导入 keystore
    • 需要在导入签名证书之前导入 CA 的根证书和中间证书
keytool -importcert -alias mykey -file mykey_signed.crt -keystore mykeystore.jks
  1. 更改密钥库密码
    • 使用 -storepasswd 命令可以更改密钥库的存储密码
keytool -storepasswd -keystore <密钥库路径> -storepass <原始密码> -new <新密码>
  1. 打印证书信息
    • 使用 -printcert 命令可以打印导出的证书信息
    • 显示证书的详细信息,包括所有者、签发者、有效期等
keytool -printcert -file <证书文件路径>
  1. 删除 Keystore 中的条目
    • 删除 keystore 中的特定条目(密钥或证书)
    • 使用 -delete 命令可以从密钥库中删除
keytool -delete -alias mykey -keystore mykeystore.jks

keytool -delete -alias <别名> -keystore <密钥库路径> -storepass <密钥库密码>
  1. Keystore 转换为其他格式(如 PKCS12
    • Java 默认的 keystore 格式是 JKS,有时需要将其转换为 PKCS12 格式,例如用于 ApacheNginx
    • -deststoretype PKCS12:指定目标 keystore 类型为 PKCS12
keytool -importkeystore -srckeystore mykeystore.jks -destkeystore mykeystore.p12 -deststoretype PKCS12
  1. 生成自签名证书
    • -dname:指定证书的可分辨名称 (DN),包括 CN(Common Name),OU(Organizational Unit),O(Organization),L(Locality),ST(State),C(Country)
keytool -genkeypair -alias selfsigned -keyalg RSA -keysize 2048 -validity 365 -keystore selfsigned.jks -dname "CN=Test, OU=Test, O=Test, L=Test, ST=Test, C=Test"

注意事项

  • Keystore 密码:每次操作 keystore 都需要提供密码,确保密码安全。
  • 备份 Keystore:Keystore 是存储密钥和证书的容器,非常重要,必须备份以防丢失。
  • 证书链:导入签名证书时,通常还需要导入对应的证书链,包括根证书和中间证书。
  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值