Download PDF
Download page 相互認証.
相互認証
サーバ認証の実装に加えて、相互(クライアントおよびサーバ)認証を実装することもできます。クライアント認証によって、コントローラは、承認および検証されたエージェントのみが接続を確立できることを保証できます。以下の手順に、相互認証を実装するためのワークフローの概略を示します。
はじめに
次のことに注意。
- 以下のエージェントはクライアント認証をサポートします。
- Javaエージェント
- データベースエージェント
- スタンドアロンマシンエージェント
- 最初に1つのエージェントでクライアント認証をセットアップして検証することをお勧めします。そのエージェントに対してクライアント認証が機能することを確認した後、追加のエージェントの構成を続行します。
- 一部のエージェントに対してはサーバ認証のみ、その他に対してはサーバ認証およびクライアント認証を行う「ハイブリッド」環境では、Glassfish で複数の HTTP リスナーをセットアップおよび構成し、1 つはサーバ認証のみ、もう 1 つはサーバ認証とクライアント認証の両方を行うこともできます。
以下の手順では、キーストアのデフォルトキーおよびキーストアパスワード(
changeit
)を使用します。このワークフローを続行する前に、以下をお勧めします。- 「コントローラSSLと証明書」の「キーストアパスワードの変更」の説明に従って、このデフォルトパスワードを変更します。
- これらの手順を実行する場合は新しいパスワードを使用します。
- 以下の手順でプレーンテキストのパスワードを使用する代わりに、「エージェントの認証情報を暗号化する」の説明に従って、暗号化されたパスワードを指定できます。
クライアント認証のセットアップ
以下の手順では、クライアントベース認証をセットアップするためのワークフローの概略を示します。これらの手順は、以下のセクションで詳細に説明されています。
- コントローラ:サーバー認証をセットアップします。
- エージェント:サーバー認証をセットアップします。
- コントローラ:クライアントキーストアをセットアップします。
- エージェント:
- コントローラからエージェントにクライアントキーストアをコピーします。
- エージェントを構成してキーストアにアクセスします。
- コントローラ:クライアント認証をサポートするようにアプリケーションサーバーを構成します。
コントローラでのサーバー認証のセットアップ
- コントローラホストで CLI ウィンドウを開き、
cd
で<controller-keystore-home>
ディレクトリの<controller-home>/appserver/glassfish/domains/domain1/config
に移動します。 信頼できるルート証明書ストアを作成して、コントローラの公開鍵を保持します。次のコマンドは、公開鍵(
s1as
)をエクスポートし、それを新しい証明書ストアファイルserver.cer
に保存します。<java-home>/bin/keytool -export -alias s1as -file server.cer \ -keystore keystore.jks -storepass changeit
BASH(オプション)
keystore.jks
の公開鍵および秘密鍵に関する情報を表示するには、以下のコマンドを入力します。<java-home>/bin/keytool -list -v -alias s1as \ -keystore ./keystore.jks \ -storepass changeit
BASHコントローラの公開鍵を
server.cer
からエージェントキーストアにインポートします。以下のコマンドは新しいキーストア(agent-truststore.jks
)を作成します。SSL 接続が確立されると、コントローラはこのキーストアからエージェントに公開鍵を送信します。<java-home>/bin/keytool -import -v -alias controller_alias -file server.cer \ -keystore agent_truststore.jks \ -storepass changeit
BASH- このコマンドは、証明書を表示して信頼するかどうかを確認します。
yes
と応答します。
エージェントでのサーバー認証のセットアップ
承認されたエージェントごとに以下を行ってください。
- コントローラからエージェントのルートディレクトリ(
<machine-agent-home>
、<java-agent-home>
、または<database-agent-home>
)にagent_truststore.jks
ファイルをコピーします。 - 承認されたエージェントごとに、
<agent-home>/conf/controller-info.xml
ファイルの以下のプロパティを次のように指定します。<controller-ssl-enabled>true
</controller-ssl-enabled>
<controller-port>
443</controller-port>
<controller-keystore-filename>agent_truststore.jks</controller-keystore-filename>
<controller-keystore-password>changeit
</controller-keystore-password>
コントローラでのクライアントキーストアのセットアップ
この手順では、署名された証明書を作成してクライアントキーストアにインポートします。以下の手順ではコントローラを使用して証明書に署名しますが、サードパーティ証明機関(CA)を使用することもできます。
(オプション)コントローラキーストア内の公開鍵および秘密鍵に関する情報を表示するには、以下のコマンドを入力します。
<java-home>/bin/keytool -list -v -alias s1as \ -keystore ./keystore.jks \ -storepass changeit
BASHコントローラの公開鍵/秘密鍵ペアを含むキーストア(
clientkeystore.jks
)を作成します。<controller-keystore-home
>
で、次のコマンドを実行します。<java-home>/bin/keytool -genkey -alias client-alias -keyalg RSA \ -keystore clientkeystore.jks \ -storepass changeit \ -keypass changeit
BASHキーツールは、キーを生成するために必要な名前、組織、およびその他の情報を要求します。
AppDynamicsのアプリエージェントは、デフォルトキーストアファクトリアルゴリズムとしてSunX509を使用します。環境内のキーストアがSunX509以外を使用している場合は、アプリエージェントにアルゴリズムを指定する必要があります。そのために、システムプロパティappdynamics.agent.ssl.keymanager.factory.algorithm
を使用できます。たとえば、アルゴリズムをPKIXに設定するには、エージェントでモニターリングされるJVMの起動コマンドに以下を追加します。-Dappdynamics.agent.ssl.keymanager.factory.algorithm=PKIX
BASH証明機関(CA)が署名できる証明書署名リクエスト(client.csr)を生成します。
<java-home>/bin/keytool -certreq -v -alias client-alias -file client.csr \ -keystore clientkeystore.jks \ -storepass changeit \ -keypass changeit
BASH信頼できる CA が署名したリクエスト(
client.csr
)を取得します。
以下のコマンドはコントローラを CA として使用し、コントローラが署名した証明書が含まれた新しいファイル(signedClient.cer
)を作成します。<java-home>/bin/keytool -gencert -infile ./client.csr -outfile signedClient.cer -alias s1as \ -keystore ./keystore.jks \ -storepass changeit \ -keypass changeit
BASH(オプション)署名した証明書に関する情報を表示するには、以下のコマンドを入力します。
<java-home>/bin/keytool -printcert -v -file ./signedClient.cer
BASH信頼できる証明機関が実際に証明書に署名していることを確認します。これを行う方法は 2 つあります。
• 署名した機関の公開鍵を信頼できるルートセットにコピーします。
• 署名した機関の公開鍵をクライアントキーストアにインポートします。
以下のコマンドは後者を実行するもので、コントローラの公開鍵をserver.cer
からclientkeystore.jks
にインポートします。<java-home>/bin/keytool -import -v -alias controller_alias -file server.cer \ -keystore clientkeystore.jks \ -storepass changeit
BASHこのコマンドは証明書を信頼するかどうかを確認します。「
yes
」を入力すると、メッセージが出力されます。Certificate was added to keystore
[Storing clientkeystore.jks]
(オプション)
clientkeystore.jks
の内容を表示するには、次のコマンドを入力します。<java-home>/bin/keytool -list -v -keystore clientkeystore.jks -storepass changeit
BASHキーストアには、
controller-alias
およびclient-alias
(これらはまだ署名されていません)のエントリが表示されます。署名された公開鍵証明書をクライアントキーストアにインポートします。次のコマンドは
signedClient.cer
をclientkeystore.jks
にインポートします。<java-home>/bin/keytool -importcert -v -alias client-alias -file ./signedClient.cer \ -keystore clientkeystore.jks \ -storepass changeit \ -keypass changeit
BASHこれで、コントローラの認証を検証する署名付き証明書によってパスワード保護された
clientkeystore.jks
ファイルがコントローラ上にあります。コントローラ上の信頼できるルート証明書に署名認証局の公開鍵が含まれていることを確認します。この手順では、コントローラを認証局として使用しているため、公開鍵はすでに含まれています。これを確認するには、次のコマンドを実行します。署名認証局の公開鍵がエージェントの公開鍵証明書に含まれるようになりました。
<java-home>/bin/keytool -list -v -alias client-alias \ -keystore clientkeystore.jks -storepass changeit
BASH
コントローラでクライアントキーストアにアクセスするためのエージェントの構成
承認されたエージェントごとに以下を行ってください。
- コントローラからエージェントの以下のディレクトリに
clientkeystore.jks
ファイルをコピーします。- データベースエージェントの場合:
<database agent home>/conf
- Java エージェントの場合:
<java-agent-home>/conf
- マシンエージェントの場合:
<machine-agent-home>
- データベースエージェントの場合:
<agent-home>/conf/controller-info.xml
ファイルで以下のプロパティを次のように指定します。
<use-ssl-client-auth>
true
</use-ssl-client-auth>
- <asymmetric-keystore-filename>clientkeystore.jks</asymmetric-keystore-filename>
<asymmetric-keystore-password>changeit</asymmetric-keystore-password>
<asymmetric-key-password>changeit</asymmetric-key-password>
<asymmetric-key-alias>client-alias</asymmetric-key-alias>
コントローラでのクライアント認証の有効化
コントローラで以下を行ってください。
- 現在実行中ではない場合はコントローラを起動します。
- CLI ウィンドウを開き、
cd
で<controller-home
>/appserver/glassfish/bin
に移動します。 - 以下のコマンドを入力して、AppServer 管理ツールを起動します。
./asadmin
asadmin プロンプトが表示されます。asadmin>
- 以下のコマンドを入力します。
list-http-listeners
これによって、使用可能な一連の HTTP リスナーが一覧表示されます。次に例を示します。
http-listener-
1
http-listener-
2
admin-listener
以下のコマンドを実行して、これらのリスナーの1つを構成します。この例では、
http-listener-2
を構成しています。set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.key-store=keystore.jks set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.client-auth-enabled=true set configs.config.server-config.network-config.protocols.protocol.http-listener-2.ssl.trust-store=cacerts.jks
CODEプロパティが正しく設定されたことを確認するために、以下のコマンドを実行します。この例でも、
http-listener-2
を前提とします。get configs.config.server-config.network-config.protocols.protocol.http-listener-2.*
CODE- コントローラを再起動します。