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