Keytool 是一个命令行实用程序,允许您管理和存储加密密钥和证书。
如果您的系统上安装了 Java,则可以使用 keytool 命令导入 CA 证书、列出证书、创建自签名证书、保存密码和公钥/私钥等等,您可以执行各种操作。
使困惑?不用担心。当你阅读时我会解释清楚。
请注意,我将使用 Linux 来测试命令并通过示例对其进行更多解释。
Keytool 命令也可在 Windows 和 macOS 上使用。
Keytool 命令是什么?
这是一个密钥和证书管理实用程序。您可以存储通常用于验证/验证对服务的访问的私钥和公钥对。
考虑到本文的标题,我们可以假设该命令主要由系统管理员和开发人员使用。
在大多数情况下,这是正确的,但用户可以调整 keytool 命令来存储密码和私钥,以用于身份验证、加密和解密目的。因此,如果您有兴趣,请在您自己的系统上尝试一下。
如果您不熟悉加密密钥的概念,请在尝试 keytool 命令之前参阅有关数据加密的文章。
此外,您还可以查看 OpenSSL 命令的示例,以了解它们的不同之处以及可以使用它们做什么。

创建自签名证书
keytool -genkeypair -alias <alias> -keypass <keypass> -validity <validity> -storepass <storepass>与购买的 SSL 证书不同,自签名证书仅用于开发/测试目的以使用安全连接。
它可以使用上述 keytool 命令语法生成。例如:
keytool -genkeypair -alias -keypass passforkeystore -validity 365 -storepass passforkeystore您可以使用任何名称作为别名。 作为占位符文本。您可以通过替换上述命令中的“ passforkeystore ”来自定义有效性并指定密钥库密码。
请注意,PKCS12 密钥库仅支持一个密码。然而,这是一种有用的密钥库类型,并非特定于 Java。
如果您的密钥库和证书需要两个不同的密码,您可以明确告诉 keytool 命令使用不同的接口。
更多信息请参考官方文档。
如果您继续创建,系统会要求您提供其他详细信息以验证真实性。它看起来像这样:
What is your first and last name?
[Unknown]: Ankush
What is the name of your organizational unit?
[Unknown]:
What is the name of your organization?
[Unknown]:
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=, O=, L=Bhubaneswar, ST=Odisha, C=91 correct?
[no]: yes 
创建 Java 密钥库和密钥对
keytool -genkeypair -keyalg RSA -keysize 2048 -keystore keystore.jks -alias java -validity 3650 
生成 Java 密钥库并导入证书
确保您拥有有效的证书或之前已生成证书。完成后,您可以导入它以生成 Java 密钥库。
keytool -importcert -file test.crt -keystore truststore.jks -alias 
使用主题生成默认密钥库的密钥对
您可以使用以下命令快速生成密钥对(例如,名为“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 -file server.cer为现有密钥库创建证书签名请求 (CSR)
考虑到您已经创建了密钥库,您可以生成 CSR。
keytool -certreq -keyalg rsa -keystore keystore.jks -alias server -file .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: cert
Creation date: 16-Nov-2022
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Ankush, OU=Geek, O=, L=Bhubaneswar, ST=od, C=91
Issuer: CN=Ankush, OU=Geek, O=, 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 server列出密钥库中的证书
如果要检查默认密钥库中存储的证书,请使用以下命令:
keytool -list -storepass passforkeystore您需要将“ passforkeystore ”替换为您设置的密码。
查看证书信息
如果需要查看单个证书的详细信息,可以使用其别名,而无需指定 keystone 数据库。
情况如下。
keytool -list -v -alias -storepass passforkeystore查看 PEM 格式的证书
PEM 是最常见的证书和加密密钥格式之一。如果您想检查 PEM 中的证书,请键入:
keytool -v -printcert -file .crt -rfc更改 Java 密钥库密码
如果您已经为 Java 密钥库创建了密码,则可以使用以下命令更改它:
keytool -delete -alias -keystore keystore.jks从 Java 密钥库中删除证书
您可以指定和删除 Java 密钥库及其别名。例如:
keytool -delete -alias -keystore keystore.jks探索命令并获取帮助
该命令有多个参数和扩展来执行各种操作。根据您的用例,您可能需要也可能不需要使用所有这些。
因此,如果您想了解有关命令选项的更多信息,您可以随时键入:
keytool -help无论哪种情况,如果您使用的是 Linux 终端,我们建议您使用以下命令阅读手册页:
man keytool您可以使用 man 命令获取有关 keytool 命令所需的所有详细信息。
所以,让这个超能力成为你的,尽你所能地学习它。
概括
文件路径和其他自定义选项可能会略有不同,具体取决于您使用的平台。另请参阅 Oracle 文档以了解标准化选项。
Keytool 是一个适用于各种任务的出色工具。尝试一下,看看你能做什么!
您还可以探索一些 Linux 命令来保持系统最佳运行。




![2021 年如何设置 Raspberry Pi Web 服务器 [指南]](https://i0.wp.com/pcmanabu.com/wp-content/uploads/2019/10/web-server-02-309x198.png?w=1200&resize=1200,0&ssl=1)

