web-dev-qa-db-ja.com

Javaキーストアファイルの「エイリアス」属性の目的/役割は何ですか?

Javaキーストアファイルのalias属性の目的について矛盾する情報を聞きました。この属性が何であるか、および何に設定する必要があるかを誰かが明確にできますか?通常のWebサーバーチェーンでリーフおよび中間証明書の新しいJavaキーストアを作成する場合?

以前は、aliasはjksファイルの各エントリの一意の識別子であり、リーフには中間証明書のdifferentエイリアスがあると思っていました。今、よくわかりません。誰かが明確にできますか?

12
Mike B

[〜#〜]エイリアス[〜#〜]

直接の質問に答えるために、エイリアスフィールドは、キーエントリを識別する一意の文字列である必要があります。これは、信頼できる中間のすべてのタイプに適用されます。

ドキュメント

Keytool

KeyStoreエイリアス

すべてのキーストアエントリ(キーと信頼できる証明書のエントリ)は、一意のエイリアスを介してアクセスされます。

-genseckeyコマンドを使用して秘密鍵を生成するキーストアにエンティティを追加するときにエイリアスを指定し、-genkeypairコマンドを使用して鍵ペア(公開鍵と秘密鍵)を生成するか、-importcertコマンドを使用して証明書または証明書チェーンを追加します信頼できる証明書のリスト。後続のkeytoolコマンドは、エンティティを参照するためにこれと同じエイリアスを使用する必要があります。

たとえば、次のコマンドを使用して、エイリアスデュークを使用して新しい公開鍵と秘密鍵のペアを生成し、公開鍵を自己署名証明書(証明書チェーンを参照)にラップするとします。

keytool -genkeypair -alias duke -keypass dukekeypasswd

これは、別名dukeに関連付けられた秘密鍵にアクセスするために後続のコマンドで必要な「dukekeypasswd」の初期パスワードを指定します。後でデュークの秘密鍵のパスワードを変更する場合は、次のようなコマンドを使用します。

`keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass` 

これにより、パスワードが「dukekeypasswd」から「newpass」に変更されます。

注:パスワードは、テスト用でない限り、または安全なシステムを使用している場合を除き、コマンドラインまたはスクリプトで実際に指定しないでください。コマンドラインで必要なパスワードオプションを指定しない場合は、プロンプトが表示されます

標準と慣行

決められた命名基準はないと思います。10人の異なる人と話し、10の異なる答えを得ることができると私は確信しています。あなたはそれをユニークで論理的にしたいだけです。

APIとOracleのKeytoolは重複をチェックする優れた機能を果たしていません。これは、キーストアの各エントリを識別するために使用されることを考えると、私の見解では特に見落としです。

重複を解決する最良の方法は、新しいキーストアを生成し、古いキーストアの各エントリを一意のエイリアスで新しいキーストアに追加することです。キーストアを反復処理し、そのタイムスタンプを使用して、ストア内のさまざまな証明書を識別できます。

11
Shane Andrie

私はまったく同じ質問をしました、そしてあなたは問題を完全にはっきりと言いました。実験後の私の理解(ドキュメントにこれが明確に記載されていないのは残念です)は次のとおりです。

  1. エイリアスは単一オブジェクトの識別子ではありません。キーストアのキーと証明書エントリにsameエイリアスを使用して、一方をもう一方を消去することなく使用できます。

  2. 実際、キーとそれに関連付けられた証明書に同じエイリアスを使用して、それらを結合する必要があります。チェーン内の他の証明書は、それらを識別するために選択した適切な名前を持つ、異なるエイリアスを持つ必要があります。

私はこれの専門家ではないので、正しい塩の粒、plsで私の答えを見てください。

1
Clint Staley

キーストア/トラストストアでは、より多くのキー/証明書を持つことができ、すべてのキーにエイリアスがあります。サーバーでSSLを構成する必要がある場合は、通常、キーストア、キーストアのパスワード、キーのパスワード、およびエイリアスを構成します。基本的に、エイリアスでは、使用するキーを参照します。

Jboss wildfly 8の例

<security-realm name="SSLClientCertRealm">    
    <server-identities>
        <ssl>
            <keystore path="server-ssl.keystore" relative-to="jboss.server.config.dir" keystore-password="keystore" alias="alias_name" key-password="keystore"/>
        </ssl>
    </server-identities>
1
rkn

あなたの質問はあまり明確ではありませんが、一つの可能​​性に答えます:

KeyStore AP​​I 抽象的に、JKS形式には具体的にSSL/TLSに関連する2種類のエントリがあります。サーバーのprivateKeyエントリには、秘密鍵証明書chain(リーフと中間物)および通常はルート)すべて1つのエイリアスの下。 trustedCertエントリ(存在する場合)には、他の当事者(通常はCA)の証明書が含まれ、それぞれが別のエイリアスの下にあります

プログラム的に、privateKeyエントリのチェーンにあるさまざまな証明書は、keystore.getCertificateChain(alias)[0] = leaf、[1] = first intermediateなどによって取得されます。

1