Download PDF
Download page 相互認証.
相互認証
サーバ認証の実装に加えて、相互(クライアントおよびサーバ)認証を実装することもできます。クライアント認証によって、コントローラは、承認および検証されたエージェントのみが接続を確立できることを保証できます。以下の手順に、相互認証を実装するためのワークフローの概略を示します。
はじめに
- 以下のエージェントはクライアント認証をサポートします。
- Javaエージェント
- データベースエージェント
- マシンエージェント
Azure App Services などの Azure PaaS 環境を除きます。
- 最初に 1 つのエージェントでクライアント認証をセットアップして検証することをお勧めします。そのエージェントに対してクライアント認証が機能することを確認した後、追加のエージェントの構成を続行します。
- 一部のエージェントに対してはサーバ認証のみ、その他に対してはサーバ認証およびクライアント認証を行う「ハイブリッド」環境では、Glassfish で複数の HTTP リスナーをセットアップおよび構成し、1 つはサーバ認証のみ、もう 1 つはサーバ認証とクライアント認証の両方を行うこともできます。
このページで説明されている以下の手順では、キーストアのデフォルトキーおよびキーストアパスワード(
changeit
)を使用します。このワークフローを続行する前に、以下をお勧めします。- 「コントローラSSLと証明書」の「キーストアパスワードの変更」の説明に従って、このデフォルトパスワードを変更します。
- これらの手順を実行する場合は新しいパスワードを使用します。
- 以下の手順でプレーンテキストのパスワードを使用する代わりに、「エージェントの認証情報を暗号化する」の説明に従って、暗号化されたパスワードを指定できます。
相互認証のセットアップ
次の手順では、相互認証をセットアップする方法について説明します。
- エージェントでサーバ認証をセットアップします。
- エージェントでクライアントキーストアをセットアップします。
- エージェントを構成してクライアントキーストアにアクセスします。
- コントローラでクライアント認証を有効化します。
エージェントでのサーバー認証のセットアップ
エージェントでサーバー認証を確立するには、コントローラの証明書に署名した機関のルート証明書を含むエージェントトラストストアを作成する必要があります。
承認されたエージェントごとに、次の手順を実行します。
- 次のいずれかのルート証明書を取得します。
- オンプレミスコントローラの証明書に署名したパブリック認証局(CA)のルート証明書。
- オンプレミスコントローラのコントローラ証明書に署名した内部 CA のルート証明書。
Java
keytool
コマンドを実行して、エージェントトラストストアを作成します。keytool -import -alias rootCA -file /usr/home/appdynamics/DigicertGlobalRootCA.pem -keystore cacerts.jks -storepass MySecurePassnword
CODE例:
keytool -import -alias rootCA -file /usr/home/appdynamics/DigicertGlobalRootCA.pem -keystore cacerts.jks -storepass MySecurePassnword
BASHトラストストアのパスワードをメモします。これは、後で承認されたエージェントを設定するために必要になります。
エージェントのトラストストアをエージェント構成ディレクトリにインストールします。
<authorized_agent_home>/conf/
CODE承認されたエージェントごとに、
<agent-home>/conf/controller-info.xml
ファイルの以下のプロパティを次のように指定します。<controller-ssl-enabled>true</controller-ssl-enabled>
<controller-port>8181</controller-port>
<controller-keystore-filename>cacerts.jks</controller-keystore-filename>
<controller-keystore-password>MySecurePassnword</controller-keystore-password>
エージェントでのクライアントキーストアのセットアップ
次の手順を実行して、署名済み証明書を作成してクライアントキーストアにインポートします。以下の手順ではコントローラを使用して証明書に署名しますが、サードパーティ認証局(CA)を使用することもできます。
新しいキーストアに新しいキーペアを作成するには、次のように入力します。
<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(オプション)
clientkeystore.jks
の内容を表示するには、以下のコマンドを入力します。<java-home>/bin/keytool -list -v -keystore clientkeystore.jks -storepass changeit
BASHキーストアには、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
ファイルがエージェント上に追加されました。「Failed to establish chain from reply」というエラーが表示された場合は、発行元の認証局のルートと中間証明書をクライアントキーストアにインストールします。ルートCAチェーンは、証明書のCA署名の有効性を確立します。ほとんどの一般的なルートCAチェーンはバンドルされたJVMのトラストストアに含まれていますが、プライベートCAに属する証明書などは、追加でルート証明書のインポートが必要になる場合があります。インポートするには、次のように入力します。
<java-home>/bin/keytool -import -alias [Any_alias] -file <path_to_root_or_intermediate_cert> -keystore clientkeystore.jks -storepass changeit
CODEコントローラ上の信頼できるルート証明書に署名認証局の公開キーが含まれていることを確認します。この手順では、コントローラを認証局として使用しているため、公開鍵はすでに含まれています。確認するには、次のように入力します。
<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>
t
rue
</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- 次のいずれかのルート証明書を取得します。
承認されたエージェントであるクライアントの証明書に署名した、パブリック認証局(CA)のルート証明書。
- 承認されたエージェントのクライアント証明書に署名した内部 CA のルート証明書。
Java
keytool
コマンドを実行して、証明書をコントローラのトラストストアにインポートします。<java-home>/bin/keytool -import -alias rootCA -file <root_certificate_file_name> -keystore <controller_home>/appserver/glassfish/domains/domain1/config/cacerts.jks -storepass <truststore_password>
CODE例:
keytool -import -alias rootCA -file /usr/home/appdynamics/DigicertGlobalRootCA.pem -keystore /opt/appdynamics/platform/product/controller/appserver/glassfish/domains/domain1/config/cacerts.jks -storepass MySecurePassnword
CODE- コントローラを再起動します。