序章
Java Keytoolは、Javaキーストアを操作するために使用されるキーおよび証明書管理ツールであり、Javaに含まれています。 Javaキーストアは、認証証明書または公開鍵証明書のコンテナであり、暗号化、認証、およびHTTPSを介したサービスのためにJavaベースのアプリケーションでよく使用されます。 そのエントリは、キーストアパスワードによって保護されています。 キーストアエントリはエイリアスによって識別され、信頼チェーンを形成するキーと証明書で構成されます。
このチートシートスタイルガイドは、Javaキーストアを操作するときに一般的に役立つkeytool
コマンドへのクイックリファレンスを提供します。 これには、Javaアプリケーションで使用できるようにJavaキーストアを作成および変更することが含まれます。
このガイドの使用方法:
- 証明書署名要求(CSR)に慣れていない場合は、OpenSSLチートシートのCSRセクションをお読みください。
- このガイドは、シンプルなチートシート形式であり、自己完結型のコマンドラインスニペットです。
- 実行しようとしているタスクに関連するセクションにジャンプします(ヒント:左下のコンテンツメニューまたはブラウザの検索機能を使用してください)
- ほとんどのコマンドは、わかりやすくするために(
\
記号を使用して)複数行に拡張されたワンライナーです。
キーストアエントリの作成とインポート
このセクションでは、キーペアと証明書の生成、および証明書のインポートに関連するJavaKeytoolコマンドについて説明します。
新規/既存のキーストアでキーを生成する
HTTP(HTTP over TLS)を使用してJavaアプリケーションを保護する場合は、この方法を使用します。 これにより、新規または既存のJavaキーストアに新しいキーペアが作成されます。これを使用してCSRを作成し、認証局からSSL証明書を取得できます。
このコマンドは、指定されたキーストアファイル(keystore.jks
)に、指定されたエイリアス(domain
)で2048ビットのRSAキーペアを生成します。
keytool -genkeypair \ -alias domain \ -keyalg RSA \ -keystore keystore.jks
指定されたキーストアがまだ存在しない場合は、要求された情報が提供された後に作成されます。 これにより、キーストアパスワード(新規または既存)の入力が求められ、続いて識別名プロンプト(秘密鍵の場合)、目的の秘密鍵パスワードの入力が求められます。
既存の秘密鍵のCSRを生成する
CAに送信してCA署名付きSSL証明書の発行を要求できるCSRを生成する場合は、この方法を使用します。 キーストアとエイリアスがすでに存在している必要があります。 前のコマンドを使用して、これを確認できます。
このコマンドは、(keystore.jks
)キーストア内のエイリアス(domain
)によって識別される秘密鍵によって署名されたCSR(domain.csr
)を作成します。
keytool -certreq \ -alias domain \ -file domain.csr \ -keystore keystore.jks
キーストアのパスワードを入力すると、CSRが生成されます。
署名済み/ルート/中間証明書のインポート
署名された証明書をインポートする場合は、この方法を使用します。 CAによってキーストアに署名された証明書。 指定されたエイリアスに存在する秘密鍵と一致する必要があります。 この同じコマンドを使用して、CAが信頼の鎖を完了するために必要なrootまたはintermediate証明書をインポートすることもできます。 domain
の代わりにroot
などの一意のエイリアスと、インポートする証明書を指定するだけです。
このコマンドは、指定されたエイリアス(domain
)の下で、証明書(domain.crt
)をキーストア(keystore.jks
)にインポートします。 署名付き証明書をインポートする場合は、指定したエイリアスの秘密鍵に対応している必要があります。
keytool -importcert \ -trustcacerts -file domain.crt \ -alias domain \ -keystore keystore.jks
キーストアのパスワードの入力を求められ、次にインポートアクションの確認を求められます。
注:このコマンドを使用して、CAの証明書をJavaトラストストアにインポートすることもできます。Javaトラストストアは、$JAVA_HOME
がJREまたはJDKのインストール場所であると想定して、通常は$JAVA_HOME/jre/lib/security/cacerts
にあります。 。
新規/既存のキーストアで自己署名証明書を生成する
Javaアプリケーションの自己署名証明書を生成する場合は、このコマンドを使用します。 これは実際には、新しいキーペアを作成するために使用されるコマンドと同じですが、有効期間は日数で指定されます。
このコマンドは、指定されたキーストアファイル(keystore.jks
)で、指定されたエイリアス(domain
)の下で365
日間有効な2048ビットのRSAキーペアを生成します。
keytool -genkey \ -alias domain \ -keyalg RSA \ -validity 365 \ -keystore keystore.jks
指定されたキーストアがまだ存在しない場合は、要求された情報が提供された後に作成されます。 これにより、キーストアパスワード(新規または既存)の入力が求められ、続いて識別名プロンプト(秘密鍵の場合)、目的の秘密鍵パスワードの入力が求められます。
キーストアエントリの表示
このセクションでは、証明書情報の表示や証明書のエクスポートなど、Javaキーストアのコンテンツの一覧表示について説明します。
キーストア証明書のフィンガープリントを一覧表示する
このコマンドは、キーストア(keystore.jks
)内のすべての証明書のSHAフィンガープリントをそれぞれのエイリアスの下に一覧表示します。
keytool -list \ -keystore keystore.jks
キーストアのパスワードの入力を求められます。 -alias domain
オプションを使用して、出力を特定のエイリアスに制限することもできます。ここで、「ドメイン」はエイリアス名です。
詳細なキーストアの内容を一覧表示する
このコマンドは、証明書チェーンの長さ、チェーン内の証明書のフィンガープリント、識別名、シリアル番号、作成/有効期限など、キーストア(keystore.jks
)に含まれるエントリに関する詳細情報をそれぞれのエイリアスで一覧表示します。
keytool -list -v \ -keystore keystore.jks
キーストアのパスワードの入力を求められます。 -alias domain
オプションを使用して、出力を特定のエイリアスに制限することもできます。ここで、「ドメイン」はエイリアス名です。
注:このコマンドを使用して、Javaトラストストアにある証明書を表示することもできます。Javaトラストストアは、$JAVA_HOME
がJREまたはJDKのインストール場所であると想定して、通常は$JAVA_HOME/jre/lib/security/cacerts
にあります。 。
Keytoolを使用して証明書情報を表示する
このコマンドは、指紋、所有者と発行者の識別名、有効期間など、証明書ファイル(certificate.crt
)に関する詳細情報を出力します。
keytool -printcert \ -file domain.crt
キーストアのパスワードの入力を求められます。
証明書のエクスポート
このコマンドは、エイリアス(domain
)に関連付けられているバイナリDERエンコード証明書(domain.der
)をキーストア(keystore.jks
)にエクスポートします。
keytool -exportcert -alias domain -file domain.der -keystore keystore.jks
キーストアのパスワードの入力を求められます。 DERエンコードされた証明書をPEMエンコードに変換する場合は、OpenSSLチートシートに従ってください。
キーストアの変更
このセクションでは、エイリアスの削除や名前の変更など、Javaキーストアエントリの変更について説明します。
キーストアのパスワードを変更する
このコマンドは、キーストア(keystore.jks
)のパスワードを変更するために使用されます。
keytool -storepasswd \ -keystore keystore.jks
現在のパスワード、次に新しいパスワードの入力を求められます。 -new newpass
オプションを使用して、コマンドで新しいパスワードを指定することもできます。ここで、「newpass」はパスワードです。
エイリアスを削除
このコマンドは、キーストア(keystore.jks
)内のエイリアス(domain
)を削除するために使用されます。
keytool -delete \ -alias domain \ -keystore keystore.jks
キーストアのパスワードの入力を求められます。
エイリアスの名前を変更
このコマンドは、エイリアス(domain
)の名前をキーストア(keystore.jks
)の宛先エイリアス(newdomain
)に変更します。
keytool -changealias \ -alias domain \ -destalias newdomain \ -keystore keystore.jks
キーストアのパスワードの入力を求められます。
結論
これは、ほとんどの人がJavaKeytoolを使用してJavaキーストアを操作する方法をカバーしているはずです。 ここでは取り上げていない他の多くの用途がありますので、コメントで他の用途を質問または提案してください。
このチュートリアルは、Java 1.7.0update65に付属しているバージョンのキーストアに基づいています。 UbuntuへのJavaのインストールについては、このガイドに従ってください。