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 命令,以便维护并保持系统处于最佳运行状态。