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 キーストアでは 1 つのパスワードのみがサポートされること に注意してください。ただし、これは Java 固有ではない便利なキーストア タイプです。
キーストアと証明書に 2 つの異なるパスワードが必要な場合は、別のインターフェイスを使用するように 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
さらに 2 つのキー ペア 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 」を設定したパスワードに置き換える必要があります。
証明書情報の表示
単一の証明書の詳細を確認する必要がある場合は、キーストーン データベースを指定せずにその別名を使用できます。
その様子は次のとおりです。
keytool -list -v -alias -storepass passforkeystore
PEM 形式で証明書を表示する
PEM は、証明書と暗号キーの最も一般的な形式の 1 つです。 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 (マニュアル) ページを読むことをお勧めします。
man keytool
man コマンドを使用すると、keytool コマンドについて必要な詳細をすべて取得できます。
ですから、それについてできる限りのことを学ぶために、このスーパーパワーを自分のものにしておきましょう。
まとめ
ファイルのパスやその他のカスタマイズ オプションは、使用しているプラットフォームとは若干異なる場合があります。標準化されたオプションについては、Oracle のドキュメントも参照してください。
Keytool は、さまざまなタスクに適した優れたツールです。試してみて、何ができるか見てみましょう!
システムを最適に実行し続けるために、いくつかの Linux コマンドを調べることもできます。