こんにちは、Habr! Javaの暗号化の基礎を学びたい初心者向けの一連の記事のうち 、Jakob Jenkovによる10番目の記事「Java Keytool」の翻訳を紹介します。
目次:
- Java暗号化
- Java暗号
- メッセージダイジェスト
- Mac
- 署名
- キーペア
- キージェネレーター
- KeyPairGenerator
- キーストア
- キーツール
- 証明書
- CertificateFactory
- 証明書パス
キーツールユーティリティ
Java Keytoolは、公開鍵/秘密鍵のペアを生成してキーストアに格納できるコマンドラインツールです。 ユーティリティ実行可能ファイルはJava SDK(またはJRE)とともに配布されるため、SDKがインストールされている場合は、プリインストールされます。
実行可能ファイルはkeytool
と呼ばれます。 実行するには、コマンドプロンプト(cmd、console、shellなど)を開きます。 現在のディレクトリをJava SDKインストールディレクトリのbin
ディレクトリに変更します。 keytool
とEnter
を押します。 次のようなものが表示されるはずです。
C:\Program Files\Java\jdk1.8.0_111\bin>keytool Key and Certificate Management Tool Commands: -certreq Generates a certificate request -changealias Changes an entry's alias -delete Deletes an entry -exportcert Exports certificate -genkeypair Generates a key pair -genseckey Generates a secret key -gencert Generates certificate from a certificate request -importcert Imports a certificate or a certificate chain -importpass Imports a password -importkeystore Imports one or all entries from another keystore -keypasswd Changes the key password of an entry -list Lists entries in a keystore -printcert Prints the content of a certificate -printcertreq Prints the content of a certificate request -printcrl Prints the content of a CRL file -storepasswd Changes the store password of a keystore Use "keytool -command_name -help" for usage of command_name C:\Program Files\Java\jdk1.8.0_111\bin>
ご覧のとおり、 keytool
ユーティリティは、キー、証明書、およびキーストアを操作するための一連のコマンドをサポートしています。 このガイドでは、これらのコマンドで最も一般的に使用されるものについて説明します。
Keytoolスクリプト
Keytool
ユーティリティのコマンドは多くの引数を取りますが、そのインストールは覚えにくい場合があります。 したがって、一連のKeytool
コマンドを使用して、いくつかのCMDまたはシェルスクリプトを作成することをお勧めします。 これらのスクリプトを使用すると、コマンドを簡単に再実行でき、また戻ってキーストアがどのように作成されたかを確認できます。
キーペアの生成
キーペア(公開キー/秘密キー)の生成は、 Keytool
ユーティリティが使用される最も一般的なタスクの1つです。 生成されたキーペアは、自己署名キーペアとしてKeyStoreファイルに挿入されます。 キーペアを生成するための一般的なコマンドライン形式は次のとおりです。
-genkeypair -alias alias -keyalg keyalg -keysize keysize -sigalg sigalg -dname dname -keypass keypass -validity valDays -storetype storetype -keystore keystore -storepass storepass -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption
引数については、「キーツールの引数」セクションで説明しています。 これらの引数のすべてが必要なわけではなく、多くはオプションです。 ユーティリティは、必要な引数を逃した場合に通知します。 以下は、証明書をKeyStoreにインポートするコマンドの例です。 コマンドラインでコマンドを入力するときは、必ず改行を削除してください。
"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -importcert -alias testkey -keypass 123456 -storetype JKS -keystore keystore2.jks -file cert.cert -rfc -storepass abcdef
Vaultレコードのリスト
キーストア内のエントリをリストするには、 list
コマンドを使用できます。 以下は、 list
コマンドの形式です。 改行は読みやすくするためのものです。 コマンドを実行する前に改行を削除します。
-list -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -rfc -protected -Jjavaoption
list
コマンドの例を次に示しlist
。 改行を忘れずに削除してください!
"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -storetype JKS -keystore keystore.jks -storepass abcdef
このコマンドは、このキーストアのすべてのエントリをリストします。 出力は次のようになります。
Keystore type: JKS Keystore provider: SUN Your keystore contains 1 entry testkey, 19-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 4F:4C:E2:C5:DA:36:E6:A9:93:6F:10:36:9E:E5:E8:5A:6E:F2:11:16
list
コマンドにalias
引数を含めると、指定されたalias
一致するエントリのみがリストに追加されます。 次に、 alias
引数を使用したlist
コマンドの例を示します。
"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -list -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef
上記のコマンドの結果:
testkey, 15-Dec-2017, PrivateKeyEntry, Certificate fingerprint (SHA1): 71:B0:6E:F1:E9:5A:E7:F5:5E:78:71:DC:08:80:47:E9:5F:F8:6D:25
キーストアエントリを削除する
また、 keytool
ユーティリティには、キーストアからエントリを削除できるコマンドdelete
ます。 このコマンドの形式は次のとおりです。
-delete -alias alias -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption
次にdelete
を呼び出す例を示します。 開始する前に必ず改行を削除してください!
"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -delete -alias testkey -storetype JKS -keystore keystore.jks -storepass abcdef
このコマンドは、 keystore.jks
ファイルに保存されているエイリアスtestkey
持つリポジトリエントリを削除します。
証明書リクエストの生成
keytool
ユーティリティは、 certreq
を使用して証明書要求を生成できます。 証明書要求は、組織の公開証明書を作成するための証明機関(CA)への要求です。 証明書要求を作成した後、証明書を作成する認証局(Verisign、Thawte、または他の認証局など)に送信する必要があります。 秘密鍵と公開鍵のペアの証明書要求を生成する前に、この秘密鍵と公開鍵のペアを鍵ストアで生成(またはインポート)する必要があります。 これを行う方法は、対応する章に記載されています。 証明書要求を生成するためのコマンド形式は次のとおりです。 このコマンドを使用するときは、必ずすべての改行を削除してください。
-certreq -alias alias -sigalg sigalg -file certreq_file -keypass keypass -storetype storetype -keystore keystore -storepass storepass -providerName provider_name -providerClass provider_class_name -providerArg provider_arg -v -protected -Jjavaoption
-certreq
例を次に-certreq
ます。
"C:\\Program Files\Java\jdk1.8.0_111\bin\keytool" -certreq -alias testkey -keypass 123456 -storetype JKS -keystore keystore.jks -storepass abcdef -file certreq.certreq
このコマンドは、 keystore.jks
ファイルにエイリアスtestkey
で保存されたキーの証明書要求を生成し、証明書要求をtestkey
というtestkey
ファイルに書き込みます。
keytoolユーティリティの引数
以下は、さまざまなkeytool
コマンドがkeytool
引数のリストです。 すべてのチームがこれらすべての議論を受け入れるわけではないことを忘れないでください。 特定のコマンドを見て、どの引数を取るかを確認してください。
-
-alias
エントリのエイリアス。 エイリアスを覚えておいてください
1つのキーのみを指すことができます。 -
-keyalg
鍵の生成に使用されるアルゴリズムの名前。 一般的に使用されるRSA。 -
-keysize
ビット単位のキー-keysize
サイズ。 通常、キーサイズは複数です。 さらに、さまざまなアルゴリズムは、事前定義された特定のキーサイズのみをサポートできます。 -
-sigalg
鍵ペアの署名に使用される署名アルゴリズム。 -
-dname
X.500標準の一意の名前。 この名前はに関連付けられます
キーストア内のこのキーペアのエイリアス、また
自己署名の「発行者」および「サブジェクト」フィールドとして使用
証明書。 -
-keypass
必要なキーペアパスワード
キーストア内のこの特定のキーペアへのアクセス。 -
-validity
証明書が-validity
日数
キーペアに接続されていることは有効でなければなりません。 -
-storetype
キーストアを保存するファイル形式。 デフォルトはJKSです。 別のオプションはPKCS11形式です。 -
-keystore
生成されたペアを保存するリポジトリファイルの名前
キー。 ファイルが存在しない場合は作成されます。 -
-file
証明書の読み取りまたは書き込み、または証明書の要求を行うファイルの名前。 -
-storepass
キーストアから、働きたい人へのパスワード
それには、このパスワードが必要です。storepass
とstorepass
の違い
1つ目はリポジトリへのアクセスを提供し、2つ目は個別の
一対のキー。 キーにアクセスするには両方のパスワードが必要になりますが、
ストレージに保存されます。 -
-rfc
このフラグが有効な場合、ユーティリティは、証明書のエクスポートまたはインポートなどに、バイナリ形式ではなくテキスト形式を使用します。 -Rfc値
RFC 1421を参照します。 -
-providerName
キーペアの作成時に使用する暗号化APIプロバイダーの名前。 プロバイダ名は、Javaセキュリティプロパティファイルで指定する必要があります。 -
-providerClass
使用する暗号化APIプロバイダーのルートクラスの名前。 プロバイダ名がJavaセキュリティプロパティファイルで指定されていない場合に使用されます。 -
-providerArg
初期化中に独自の暗号化プロバイダーに渡される引数(プロバイダーが必要な場合)。 -
-v
冗長の省略形であるKeytoolは、多くの追加情報を読み取り可能な形式でコマンドラインに出力します。 -
-protected
キーストアパスワードをハードウェアトークンなどの外部メカニズムによって提供する必要があるかどうかを決定します。 有効な値はtrueおよびfalseです。 -
-Jjavaoption
を生成してストレージを作成するJava VM-Jjavaoption
オプション文字列。