作为系统管理员和开发人员需要了解的 17 个 Keytool 命令示例

Keytool:密钥和证书管理工具详解

Keytool 是一个命令行实用工具,它主要用于管理和存储加密密钥及数字证书。可以将其视为一个用来处理密钥和证书的“工具箱”。

如果你的系统已安装 Java,你便可以使用 keytool 命令进行多种操作,包括导入CA证书、列出已有的证书、生成自签名证书、安全地存储密码以及公钥/私钥对等等。功能非常强大。

感觉有点复杂?别担心,接下来我会用更简单易懂的方式来解释这些概念和操作。

请注意,为了方便演示,我将在Linux环境下进行命令测试和讲解。但这并不意味着只能在Linux上使用,Keytool命令在Windows和macOS系统上同样适用。

Keytool 命令的功能是什么?

Keytool 的核心功能是密钥和证书的管理。它允许你存储用于身份验证和访问控制的私钥/公钥对。这就像给你需要保护的资源设置了一把“数字锁”。

从本文标题来看,你可能会认为这个命令主要是系统管理员和开发人员才会使用。这在大多数情况下是对的,但实际上,普通用户也可以利用 keytool 命令来安全存储用于身份验证、数据加密和解密的密码和密钥。如果你对此感兴趣,不妨在你的系统上亲自尝试一下。

如果你对加密密钥的概念还不太熟悉,建议你先阅读一些关于数据加密的文章,以便更好地理解 keytool 的工作原理。同时,了解一些 OpenSSL 命令的示例也会帮助你对比两者之间的异同。

生成自签名证书

keytool -genkeypair -alias <别名> -keypass <密钥密码> -validity <有效期> -storepass <密钥库密码>

与你从证书颁发机构(CA)购买的SSL证书不同,自签名证书主要用于开发和测试环境,用来建立安全的连接。你可以使用上面的 keytool 命令语法来生成一个自签名证书。例如,可以像这样操作:

keytool -genkeypair -alias techblik.com -keypass passforkeystore -validity 365 -storepass passforkeystore

你可以使用任何名称作为别名,我在这里使用 techblik.com 作为示例。 你还可以自定义证书的有效期,并为密钥库设定密码,请将上述命令中的“passforkeystore”替换为你自己的密码。

请注意,PKCS12 密钥库仅支持一个密码。但是,PKCS12 是一种常用的密钥库类型,并不局限于 Java。

如果你的密钥库和证书需要不同的密码,你需要在 keytool 命令中明确指定使用不同的接口。

你可以在官方文档中了解更多关于这方面的信息。

在执行生成自签名证书的命令后,系统会提示你输入更多详细信息以确保证书的真实性。它看起来类似于这样:

What is your first and last name?
  [Unknown]:  Ankush
What is the name of your organizational unit?
  [Unknown]:  techblik.com
What is the name of your organization?
  [Unknown]:  techblik.com
What is the name of your City or Locality?
  [Unknown]:  Bhubaneswar
What is the name of your State or Province?
  [Unknown]:  Odisha
What is the two-letter country code for this unit?
  [Unknown]:  91
Is CN=Ankush, OU=techblik.com, O=techblik.com, L=Bhubaneswar, ST=Odisha, C=91 correct?
  [no]:  yes

创建 Java 密钥库和密钥对

keytool -genkeypair -keyalg RSA -keysize 2048 -keystore keystore.jks -alias geekflarejava -validity 3650

生成 Java 密钥库并导入证书

请确保你已经拥有有效的证书,或者之前已经生成了一个。然后,你可以使用以下命令将证书导入并生成一个 Java Keystore。

keytool -importcert -file test.crt -keystore truststore.jks -alias techblik.com

使用主题为默认密钥库生成密钥对

你可以使用以下命令快速生成一个密钥对,例如命名为“ca”:

keytool -alias ca -dname CN=CA -genkeypair

创建签名证书链

假设你已经创建了 ca 和 ca1 密钥对。你可以使用以下命令创建一个签名证书链,其中 ca 将对 ca1 进行签名:

keytool -alias ca1 -certreq
keytool -alias ca -gencert -ext san=dns:ca1
keytool -alias ca1 -importcert

你还可以使用另外两个密钥对 ca1 和 ca2 来完成证书链的创建,其中 ca1 将对 ca2 进行签名。

导入证书

如果要从本地文件导入证书,可以使用以下命令:

keystool -import -alias techblik.com -file geekflareserver.cer

为现有密钥库创建证书签名请求 (CSR)

假设你已经创建了一个密钥库,你可以通过以下命令生成一个 CSR:

keytool -certreq -keyalg rsa -keystore keystore.jks -alias server -file techblik.com.csr

列出存储在 Java 密钥库中的证书

一个密钥库可以包含多个证书条目。 假设我们要查看名为“keystore.jks”的密钥库中的证书列表,可以使用以下命令:

keytool -v -list -keystore keystore.jks

输出结果将类似于这样:

keytool -v -list -keystore keystore.jks
Enter keystore password:  
Keystore type: PKCS12
Keystore provider: SUN

Your keystore contains 2 entries

Alias name: geekflarecert
Creation date: 16-Nov-2022
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Ankush, OU=Geek, O=techblik.com, L=Bhubaneswar, ST=od, C=91
Issuer: CN=Ankush, OU=Geek, O=techblik.com, L=Bhubaneswar, ST=od, C=91
Serial number: a0b9a99
Valid from: Wed Nov 16 09:42:37 IST 2022 until: Sat Nov 13 09:42:37 IST 2032
Certificate fingerprints:
	 SHA1: 23:7C:65:A7:A6:84:18:F8:45:04:92:DF:D4:BB:0F:91:6D:A5:C5:BE
	 SHA256: C0:25:ED:B8:CF:1A:E6:E1:C5:75:A8:10:8F:CD:BE:42:26:96:9C:9A:FA:74:65:07:71:06:9A:2C:F5:80:FE:7F
Signature algorithm name: SHA256withRSA
Subject Public Key Algorithm: 2048-bit RSA key
Version: 3

检查单个证书的内容

假设你已经有了一个生成的证书,你可以使用以下命令来查看更多关于证书的信息:

keytool -v -printcert -file server.crt

查看 Java 密钥库中的证书

你可以列出密钥库数据库中的所有证书。可以使用如下命令:

keytool -v -list -keystore keystore.jks

使用别名和密钥库查看密钥库

如果要使用创建密钥库时设置的别名来查看密钥库信息,可以使用以下命令:

keytool -v -list -keystore keystore.jks -alias geekflareserver

列出 KeyStore 中的证书

如果要查看存储在默认密钥库中的证书,可以使用以下命令:

keytool -list -storepass passforkeystore

你需要将“passforkeystore”替换成你设置的密钥库密码。

查看证书信息

如果需要查看单个证书的详细信息,可以使用别名而不指定密钥库数据库。例如:

keytool -list -v -alias techblik.com -storepass passforkeystore

查看 PEM 格式的证书

PEM 是最常用的证书和加密密钥格式之一。如果想以 PEM 格式查看证书,可以使用以下命令:

keytool -v -printcert -file techblik.com.crt -rfc

更改 Java 密钥库密码

如果你已经为 Java Keystore 设置了密码,可以使用以下命令来更改它:

keytool -delete -alias techblik.com -keystore keystore.jks

从 Java 密钥库中删除证书

你可以指定 Java Keystore 及其别名来删除特定的证书。例如:

keytool -delete -alias techblik.com -keystore keystore.jks

探索命令并获取帮助

keytool 命令有许多参数和扩展,可以用来执行各种操作。 根据你的具体使用场景,你可能不需要用到所有的参数。

如果你想深入了解 keytool 命令的选项,可以随时使用以下命令查看帮助文档:

keytool -help

或者,如果你使用的是 Linux 终端,我建议你使用以下命令查看手册页:

man keytool

通过 man 命令,你可以获得关于 keytool 命令所有必要的信息。

所以,掌握这些技能,尽你所能去探索它吧!

总结

文件路径和其他自定义选项可能会因为你使用的平台而有所不同。 你也可以参考 Oracle 的官方文档来获取更标准的选项。

Keytool 是一个功能强大的工具,可以帮助你完成各种与密钥和证书相关的任务。 亲自尝试一下,看看你能用它做些什么!

此外,你还可以探索一些 Linux 命令,以便维护并保持系统处于最佳运行状态。