サーバ認証の実装に加えて、相互(クライアントおよびサーバ)認証を実装することもできます。クライアント認証によって、コントローラは、承認および検証されたエージェントのみが接続を確立できることを保証できます。以下の手順に、相互認証を実装するためのワークフローの概略を示します。 

はじめに

  • 以下のエージェントはクライアント認証をサポートします。
  • 最初に 1 つのエージェントでクライアント認証をセットアップして検証することをお勧めします。そのエージェントに対してクライアント認証が機能することを確認した後、追加のエージェントの構成を続行します。 
  • 一部のエージェントに対してはサーバ認証のみ、その他に対してはサーバ認証およびクライアント認証を行う「ハイブリッド」環境では、Glassfish で複数の HTTP リスナーをセットアップおよび構成し、1 つはサーバ認証のみ、もう 1 つはサーバ認証とクライアント認証の両方を行うこともできます。 
  • このページで説明されている以下の手順では、キーストアのデフォルトキーおよびキーストアパスワード(changeit)を使用します。このワークフローを続行する前に、以下をお勧めします。

    1. コントローラSSLと証明書」の「キーストアパスワードの変更」の説明に従って、このデフォルトパスワードを変更します。
    2. これらの手順を実行する場合は新しいパスワードを使用します。
  • 以下の手順でプレーンテキストのパスワードを使用する代わりに、「エージェントの認証情報を暗号化する」の説明に従って、暗号化されたパスワードを指定できます。  

相互認証のセットアップ

次の手順では、相互認証をセットアップする方法について説明します。

  1. エージェントでサーバ認証をセットアップします
  2. エージェントでクライアントキーストアをセットアップします
  3. エージェントを構成してクライアントキーストアにアクセスします
  4. コントローラでクライアント認証を有効化します。 

エージェントでのサーバー認証のセットアップ

エージェントでサーバー認証を確立するには、コントローラの証明書に署名した機関のルート証明書を含むエージェントトラストストアを作成する必要があります。

承認されたエージェントごとに、次の手順を実行します。

  1. 次のいずれかのルート証明書を取得します。
    • オンプレミスコントローラの証明書に署名したパブリック認証局(CA)のルート証明書。
    • オンプレミスコントローラのコントローラ証明書に署名した内部 CA のルート証明書。
  2. 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

    トラストストアのパスワードをメモします。これは、後で承認されたエージェントを設定するために必要になります。

  3. エージェントのトラストストアをエージェント構成ディレクトリにインストールします。

    <authorized_agent_home>/conf/ 
    CODE
  4. 承認されたエージェントごとに、<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)を使用することもできます。

  1. 新しいキーストアに新しいキーペアを作成するには、次のように入力します。

    <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
  2. 認証局(CA)が署名できる証明書署名要求(client.csr)を生成します。 

    <java-home>/bin/keytool -certreq -v -alias client-alias -file client.csr \
                            -keystore clientkeystore.jks \
                            -storepass changeit \
                            -keypass changeit 
    BASH
  3. 信頼できる 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
  4. (オプション)署名済み証明書に関する情報を表示するには、以下のコマンドを入力します。

    <java-home>/bin/keytool -printcert -v -file ./signedClient.cer      
    BASH
  5. (オプション)clientkeystore.jks の内容を表示するには、以下のコマンドを入力します。

    <java-home>/bin/keytool -list -v -keystore clientkeystore.jks -storepass changeit
    BASH

    キーストアには、client-alias(未署名)のエントリが表示されます。

  6. 署名された公開鍵証明書をクライアントキーストアにインポートします。以下のコマンドで signedClient.cerclientkeystore.jks にインポートします。 

    <java-home>/bin/keytool -importcert -v -alias client-alias -file ./signedClient.cer \
    -keystore clientkeystore.jks \
    -storepass changeit \
    -keypass changeit
    BASH

    これで、コントローラの認証を検証する署名付き証明書によってパスワード保護された clientkeystore.jks ファイルがエージェント上に追加されました。 

  7. 「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
  8. コントローラ上の信頼できるルート証明書に署名認証局の公開キーが含まれていることを確認します。この手順では、コントローラを認証局として使用しているため、公開鍵はすでに含まれています。確認するには、次のように入力します。

    <java-home>/bin/keytool -list -v -alias client-alias \
                            -keystore clientkeystore.jks -storepass changeit
    BASH

    署名認証局の公開キーがエージェントの公開キー証明書に含まれるようになりました。

クライアントキーストアにアクセスするためのエージェントの構成

承認されたエージェントごとに、次の手順を実行します。

  1. エージェントの以下のディレクトリに、生成された clientkeystore.jks ファイルをコピーします。
    • データベースエージェントの場合:<database agent home>/conf
    • Java エージェントの場合:<java-agent-home>/conf
    • マシンエージェントの場合:<machine-agent-home>
  2. <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>

コントローラでのクライアント認証の有効化

コントローラから、次の手順を実行します。

  1. 現在実行中ではない場合はコントローラを起動します。
  2. CLI パネルと cd<controller-home>/appserver/glassfish/bin に開きます。 
  3. AppServer 管理ツールを起動するには、./asadmin
    と入力します。asadmin プロンプト(asadmin>)が表示されます。
  4. list-http-listeners
    と入力します。これによって、使用可能な一連の HTTP リスナーが一覧表示されます。次に例を示します。
            http-listener-1
       http-listener-2
       admin-listener
  5. 以下のコマンドを実行して、これらのリスナーの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
  6. プロパティが正しく設定されたことを確認するために、以下のコマンドを実行します。この例でも、http-listener-2 を前提とします。 

     get configs.config.server-config.network-config.protocols.protocol.http-listener-2.*
    CODE
  7. 次のいずれかのルート証明書を取得します。
    • 承認されたエージェントであるクライアントの証明書に署名した、パブリック認証局(CA)のルート証明書。

    • 承認されたエージェントのクライアント証明書に署名した内部 CA のルート証明書。
  8. 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
  9. コントローラを再起動します。