Java Keytool Essentials:Javaキーストアの操作

前書き

Java Keytoolは、Javaキーストアの操作に使用されるキーおよび証明書管理ツールであり、Javaに含まれています。 Javaキーストアは、認証証明書または公開鍵証明書のコンテナであり、Javaベースのアプリケーションで暗号化、認証、およびHTTPS経由の提供によく使用されます。 そのエントリは、キーストアパスワードで保護されています。 キーストアエントリは_alias_で識別され、信頼チェーンを形成するキーと証明書で構成されます。

この虎の巻スタイルのガイドは、Javaキーストアを操作するときに一般的に役立つ `+ keytool +`コマンドのクイックリファレンスを提供します。 これには、Javaキーストアを作成および変更して、Javaアプリケーションで使用できるようにすることが含まれます。

このガイドの使用方法:

  • 証明書署名要求(CSR)に詳しくない場合は、https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-andのCSRセクションをお読みください-csrs / [OpenSSLチートシート]

  • このガイドはシンプルなチートシート形式で、自己完結型のコマンドラインスニペットです。

  • 完了しようとしているタスクに関連するセクションにジャンプします(ヒント:左下の_Contents_メニューまたはブラウザの_Find_機能を使用します)

  • ほとんどのコマンドは、明確にするために( `+ \ +`記号を使用して)複数行に展開されたワンライナーです。

キーストアエントリの作成とインポート

このセクションでは、キーペアと証明書の生成、および証明書のインポートに関連するJava Keytoolコマンドについて説明します。

新規/既存のキーストアでキーを生成する

HTTP(HTTP over TLS)を使用してJavaアプリケーションを保護する場合は、この方法を使用します。 これにより、新規または既存のJavaキーストアに新しいキーペアが作成され、CSRの作成と認証局からのSSL証明書の取得に使用できます。

このコマンドは、指定されたキーストアファイル( + keystore.jks +)で、指定されたエイリアス( + domain +)の下に2048ビットRSAキーペアを生成します。

keytool -genkeypair \
       -alias  \
       -keyalg RSA \
       -keystore

指定されたキーストアがまだ存在しない場合、要求された情報が提供された後に作成されます。 これにより、キーストアのパスワード(新規または既存)の入力が求められ、続いて識別名のプロンプト(秘密鍵の場合)が入力され、次に目的の秘密鍵のパスワードが入力されます。

既存の秘密キーのCSRを生成する

CAに送信してCA署名付きSSL証明書の発行を要求できるCSRを生成する場合は、この方法を使用します。 キーストアとエイリアスがすでに存在している必要があります。前のコマンドを使用してこれを確認できます。

このコマンドは、( + keystore.jks +)キーストアのエイリアス( + domain +)で識別される秘密鍵で署名されたCSR( + domain.csr +)を作成します:

keytool -certreq \
       -alias  \
       -file  \
       -keystore

キーストアのパスワードを入力すると、CSRが生成されます。

署名済み/ルート/中間証明書のインポート

署名済み証明書をインポートする場合は、この方法を使用します。 キーストアにCAによって署名された証明書。指定されたエイリアスに存在する秘密鍵と一致する必要があります。 この同じコマンドを使用して、CAが信頼の連鎖を完了するために必要とする_root_または_intermediate_証明書をインポートすることもできます。 「+ domain」ではなく「+ root」などの一意のエイリアスと、インポートする証明書を指定するだけです。

このコマンドは、指定されたエイリアス( + domain +)の下で、キーストア( + keystore.jks +)に証明書( + domain.crt +)をインポートします。 署名済み証明書をインポートする場合、指定されたエイリアスの秘密鍵に対応する必要があります。

keytool -importcert \
       -trustcacerts -file  \
       -alias  \
       -keystore

キーストアパスワードの入力を求められ、インポートアクションの確認が求められます。

*注意:*また、このコマンドを使用して、CAの証明書をJavaトラストストアにインポートすることもできます。これは通常、JREまたはJDKが `+ $ JAVA_HOME `であると仮定して、 ` $ JAVA_HOME / jre / lib / security / cacerts +`にありますインストールされます。

新規/既存のキーストアで自己署名証明書を生成

Javaアプリケーションの自己署名証明書を生成する場合は、このコマンドを使用します。 これは実際には新しいキーペアの作成に使用されるコマンドと同じですが、有効期間は日数で指定されます。

このコマンドは、指定されたキーストアファイル( + keystore.jks +)で、指定されたエイリアス( + domain +)の下で、 `+ 365 +`日間有効な2048ビットRSAキーペアを生成します。

keytool -genkey \
       -alias  \
       -keyalg RSA \
       -validity  \
       -keystore

指定されたキーストアがまだ存在しない場合、要求された情報が提供された後に作成されます。 これにより、キーストアのパスワード(新規または既存)の入力が求められ、続いて識別名のプロンプト(秘密鍵の場合)が入力され、次に目的の秘密鍵のパスワードが入力されます。

キーストアエントリの表示

このセクションでは、証明書情報の表示や証明書のエクスポートなど、Javaキーストアの内容のリストについて説明します。

キーストア証明書のフィンガープリントを一覧表示する

このコマンドは、キーストア( + keystore.jks +)内のすべての証明書のSHAフィンガープリントを、それぞれのエイリアスの下にリストします。

keytool -list \
       -keystore

キーストアのパスワードの入力を求められます。 また、「+-alias domain」オプションを使用して、出力を特定のエイリアスに制限することもできます。「domain」はエイリアス名です。

詳細なキーストアの内容を一覧表示する

このコマンドは、キーストア( + keystore.jks +)に含まれるエントリに関する詳細情報を一覧表示します。証明書チェーンの長さ、チェーン内の証明書のフィンガープリント、識別名、シリアル番号、作成/有効期限など、それぞれのエイリアスの下にあります。

keytool -list -v \
       -keystore

キーストアのパスワードの入力を求められます。 また、「+-alias domain」オプションを使用して、出力を特定のエイリアスに制限することもできます。「domain」はエイリアス名です。

*注意:*このコマンドを使用して、Javaトラストストアにある証明書を表示することもできます。これは通常、 JAVA_HOME + `がJREまたはJDKの場所であると想定して、 JAVA_HOME / jre / lib / security / cacerts +`にありますインストールされます。

Keytoolを使用して証明書情報を表示する

このコマンドは、指紋、所有者と発行者の識別名、その有効期間など、証明書ファイル( + certificate.crt +)に関する詳細情報を出力します。

keytool -printcert \
       -file

キーストアのパスワードの入力を求められます。

輸出証明書

このコマンドは、キーストア( + keystore.jks +)のエイリアス( + domain +)に関連付けられたバイナリDERエンコードされた証明書( + domain.der +)をエクスポートします。

keytool -exportcert
       -alias
       -file
       -keystore

キーストアのパスワードの入力を求められます。 DERエンコードされた証明書をPEMエンコードに変換する場合は、https://www.digitalocean.com/community/tutorials/openssl-essentials-working-with-ssl-certificates-private-keys-and-csrsに従ってください#convert-certificate-formats [OpenSSLチートシート]。

キーストアの変更

このセクションでは、エイリアスの削除や名前変更など、Javaキーストアエントリの変更について説明します。

キーストアパスワードの変更

このコマンドは、キーストア( + keystore.jks +)のパスワードを変更するために使用されます:

keytool -storepasswd \
       -keystore

現在のパスワードの入力を求められ、次に新しいパスワードが要求されます。 コマンドで新しいパスワードを指定するには、「+-new newpass +」オプションを使用します。「newpass」はパスワードです。

エイリアスを削除

このコマンドは、キーストア( + keystore.jks)のエイリアス(` + domain`)を削除するために使用されます:

keytool -delete \
       -alias domain \
       -keystore

キーストアのパスワードの入力を求められます。

エイリアスの名前を変更

このコマンドは、キーストア( + keystore.jks)のエイリアス(` + domain + )を宛先エイリアス( + new domain`)に名前変更します。

keytool -changealias \
       -alias  \
       -destalias  \
       -keystore

キーストアのパスワードの入力を求められます。

結論

ほとんどの人がJava Keytoolを使用してJavaキーストアを操作する方法について説明します。 ここには記載されていない他の多くの用途があるので、コメントで他の用途を尋ねたり提案したりしてください。

このチュートリアルは、Java 1.7.0 update 65に同梱されているキーストアのバージョンに基づいています。 UbuntuへのJavaのインストールについては、https://www.digitalocean.com/community/tutorials/how-to-install-java-on-ubuntu-with-apt-get [このガイド]に従ってください。