このトピックでは、SSLを使いAppDynamicsのJavaエージェントと以下のAppDynamicsコンポーネント間の通信を保護する方法について説明します。

Javaエージェント は、SSLモード時のSSLトラストチェーンの拡張および強制実行をサポートしています。

SSL構成詳細の収集

SSLを介したJavaエージェントの通信を保護するため、コントローラもしくはAnalyticsエージェントのSSL構成情報が必要になります。

  • SSLポート。
    • SaaSコントローラの場合、SSLポートは443です。
    • オンプレミスコントローラの場合、デフォルトのSSLポートは8181ですが、別のポートでSSLをリッスンするようにコントローラーを構成することもできます。
    • ad.dw.http.port プロパティを使用して、Analytics エージェント用ポートを構成する。詳細については、Analytics エージェントの SSL の有効化を参照してください。
  • 証明書の署名メソッド。
    • パブリック証明機関(CA)が証明書に署名。DigiCert、Verisign、Thawteおよびその他の商用CAなど。
    • 組織内部のCAが署名した証明書。一部の企業では内部の証明機関を保持し、その内部CAがドメイン内のトラストと暗号化を管理します。
    • コントローラまたはAnalyticsエージェントは自己署名証明書を使用。

コントローラのSSL証明書の信頼性を確立

JavaエージェントとAppDynamicsコントローラとの間で信頼関係を確立するには、コントローラの証明書に署名した機関のルート証明書をエージェントトラストストアにインポートする必要があります。

オンプレミスコントローラを自己署名証明書で保護した場合、エージェントのトラストストアを作成する手順については「Keystore 証明書抽出ユーティリティ」を参照してください。

  1. コントローラの証明書に署名した機関のルート証明書を取得する。
  2. Java keytoolコマンドを実行し、ルート証明書をインポートする。コマンドは管理されたエージェント構成ディレクトリにキーストアを作成します(存在しない場合)。

    keytool -import -alias rootCA -file <root_certificate_file_name> -keystore <agent_home>/<version_number>/conf/cacerts.jks -storepass <truststore_password>

    例:

    keytool -import -alias ControllerRootCA -file /usr/home/appdynamics/DigicertGlobalRootCA.pem -keystore /usr/local/appagent/4.3.0.0/conf/cacerts.jks -storepass MySecurePassword

    truststoreパスワードは保管しておいてください。Javaエージェントの構成に必要となります。

Javaエージェントとコントローラ間のSSLを有効にする

バージョン管理された controller-info.xml(<agent_home>/<version_number>/conf/controller-info.xml)内の次のシステムプロパティを構成します。各プロパティの詳細については、「Javaエージェント構成プロパティ」の「SSL 構成プロパティ」を参照してください。

  • Controller Port:コントローラの SSL ポート。AppDynamics SaaSの場合は443。

    <controller-port>443</controller-port>

  • Controller SSL Enabled: 話でした。 

    <controller-ssl-enabled>true</controller-ssl-enabled>

  • Controller Keystore Password: エージェントtruststoreのプレーンテキストパスワード。

    <controller-keystore-password>MySecurePassword</controller-keystore-password>

    Secure Credential Storeを有効にしている場合、パスワードを暗号化して入力。詳細については、エージェントの認証情報を暗号化するを参照してください。

  • Controller Keystore Filename: <agent home>/<version>/conf に関連するエージェントトラストストアのパス。デフォルトの <agent_home>/<version_number>/conf/cacerts.jks 以外のトラストストアを使用する場合は必須です。

    <controller-keystore-filename>../../conf/cacerts.jks</controller-keystore-filename>

    コントローラポートを指定し、JVM起動スクリプトでコントローラ用SSLを有効化できますが、バージョン管理されたcontroller-info.xmlファイルでtruststoreのパスワードとファイル名を指定する必要があります。

構成の変更が完了したら、JVMを再起動する。

SSLとSecure Credential Storeの暗号化を有効化したcontroller-info.xml のサンプル

<?xml version="1.0" encoding="UTF-8"?>
<controller-info>
    <controller-host>mycompany.saas.appdynamics.com</controller-host>
    <controller-port>443</controller-port>
    <controller-ssl-enabled>true</controller-ssl-enabled>
    <!-- Encrypted Controller keystore / agent trust store password -->
    <controller-keystore-password>Tw49bd0hdCMBoQ5pfMMuYA/cA5B4pouVPkv48ovRm6c=</controller-keystore-password>
    <controller-keystore-filename>../../conf/cacerts.jks</controller-keystore-filename>
    ...
    <!-- Secure Credential Store configuration -->
    <!-- Enable the Secure Credential Store -->
    <use-encrypted-credentials>true</use-encrypted-credentials>
    <!-- Path to they secure credential keystore -->
    <credential-store-filename>/opt/appdynamics/secretKeyStore</credential-store-filename>
    <!-- Obfuscated secure credential keystore password -->
    <credential-store-password>n/8GvAZsKk4gM3Z6g+XQ1w==</credential-store-password>
</controller-info>

AnalyticsエージェントのSSL証明書の信頼性を確立

JavaエージェントとAnalyticsエージェントとの間で信頼関係を確立するには、Analyticsエージェントの証明書に署名した機関のルート証明書をエージェントトラストストアにインポートする必要があります。

  1. Analyticsエージェントの証明書に署名した機関のルート証明書を取得する。
  2. Java キーツールコマンドを実行して、ルート証明書をJREトラストストアにインポートする。

    keytool -import -trustcacerts -alias analytics-agent -file <root_certificate_file_name> -keystore <agent_home>/<version_number>/conf/cacerts.jks

    例:

    keytool -import -trustcacerts -alias analytics-agent -file /usr/home/appdynamics/MyAnalyticsCert.crt -keystore /usr/local/appagent/4.3.0.0/conf/cacerts.jks

Analytics エージェントを使用しないで Analytics の信頼性の確立する

専用の Analytics エージェントではなく、Java エージェントのバージョン 4.5.16 以降を使用してトランザクション分析データを取得できます。この導入モデルでは、Java エージェントがイベントサービスと直接通信します。 

Java エージェントにカスタム信頼ストアを使用する場合、Analytics エージェントなしでトランザクション分析を有効にするには、イベントサービスとの信頼を確立する必要があります。次のコマンド例は、Java エージェント信頼ストアにイベントサービス証明書をインポートする方法を示しています。

  • 署名済み証明書を使用する場合:

    keytool -import -trustcacerts -v -alias events_service -file /path/to/CA-cert.txt -keystore cacerts.jks
  • 自己署名証明書を使用する場合:

    keytool -import -v -alias events_service -file events_service.crt -keystore cacerts.jks

プライベート証明書の信頼を確立しない場合、Java エージェントを使用してトランザクション分析データを取得することはできません。トランザクション分析用に設定したアプリケーションおよびビジネストランザクションは、Java エージェントがイベントサービスと通信できない場合は有効にできません。 

この動作をオーバーライドするには、-Dappdynamics.force.default.ssl.certificate.validation プロパティを使用します。詳細については、「Java エージェント構成プロパティ」を参照してください。 


JavaエージェントとAnalyticsエージェント間のSSLを有効にする

Java エージェントが SSL を介して Analytics エージェントにアクセスできるようにするには、次のように JVM の appdynamics.analytics.agent.url システムプロパティを構成します。

  • HTTPSプロトコルを使用する。
  • Analytics エージェントの SSL ポートを使用する。このポートは、Analytics エージェントの ad.dw.http.port プロパティと同じ値にする必要があります。詳細については、Analytics エージェントの SSL の有効化を参照してください。 
-Dappdynamics.analytics.agent.url=https://<analytics_agent_host>:<analytics_agent_port>/v2/sinks/bt

たとえば、

java -javaagent:/home/appdynamics/agent/javaagent.jar -Dappdynamics.controller.hostName=mycontroller.example.com -Dappdynamics.controller.port=8090 -Dappdynamics.analytics.agent.url=https://my.analytics.host.example.com:9090/v2/sinks/bt -Dappdynamics.agent.applicationName=ACMEOnline -Dappdynamics.agent.tierName=Inventory -Dappdynamics.agent.nodeName=Inventory1 ACMEOnline.jar


構成の変更が完了したら、JVMを再起動する。

JavaエージェントTruststoreの保護

Javaエージェントトラストストアの改ざんを防ぐため以下の安全対策を行います。

  • ファイルシステムの権限を通じたtruststoreファイルの保護。
    • あらゆるユーザーにエージェントtruststoreの読み取りを許可。

    • 権限のあるユーザーがtruststoreを所有。

    • 指定された権限のあるユーザーのみにtruststoreの書き込みを制限。

  • エージェント構成ファイルを保護して、読み取りはエージェントのランタイムユーザーのみ、書き込みは権限のあるユーザーのみに設定。

    • バージョン管理された構成ファイル: <agent_home>/<version_number>/conf/controller-info.xml

    • グローバル構成ファイル: <agent_home>/conf/controller-info.xml

Keystore 証明書抽出ユーティリティ

Keystore 証明書抽出ユーティリティは、コントローラのJava Keystoreから証明書をエクスポートしてエージェントのtruststoreに書き込みます。次の場所にインストールされます。

<agent_home>/<version_number>/utils/keystorereader/kr.jar
CODE

コントローラKeystoreがエージェントマシンにコピーされるのを防ぐには、コントローラサーバーからこのユーティリティを実行します。次の場所でコントローラのエージェントディストリビューションにアクセスしてください。

<controller_home>/appserver/glassfish/domains/domain1/appagent
CODE
  1. kr.jarを実行し、次のパラメータを渡す。
    • コントローラのKeystoreへの完全なパス

      <controller_home>/appserver/glassfish/domains/domain1/config/keystore.jks
      CODE
    • トラストストア出力ファイル名。デフォルトでは、エージェントはエージェントホームの <agent_home>/<version>/conf ディレクトリにある cacerts.jks という名前の Java トラストストアファイルを探します。 
    • コントローラの証明書のパスワード(デフォルトで「changeit」)。パスワードを含まない場合、エクストラクターはパスワード「changeit」を出力されたtruststoreに適用。

      /<full path to application JRE>/bin/java -jar kr.jar <controller_home>/appserver/glassfish/domains/domain1/config/keystore.jks cacerts.jks <controller_certificate_password>
      CODE
  2. エージェントのtruststoreをバージョン管理されたエージェント構成ディレクトリにインストール。

    <agent_home>/<version_number>/conf/

SSL問題の解決