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

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

SSL構成詳細の収集

SSL を介した Java エージェントの通信を保護するため、コントローラまたは分析エージェントの次の 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. コントローラの証明書に署名した機関のルート証明書を取得する。
    1. SaaS コントローラのみを展開する場合:https://www.digicert.com/digicert-root-certificates.htm で「DigiCert Global Root CA」証明書をダウンロードできます。

    2. ホスト証明書の有効期間は非常に短く、頻繁に変更されるため、ルート CA 証明書のみを Java SSL トラストストアにインポートする必要があります。ルート CA 証明書を信頼すると、ホスト証明書が期限切れ前に変更された場合でも、コントローラへの接続が中断されることはありません。

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

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

    例:

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

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

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

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

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

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

  • コントローラの SSL の有効化:true。 

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

  • コントローラキーストアのパスワード:エージェントトラストストアのプレーンテキストパスワード。

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

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

  • コントローラキーストアのファイル名:<agent home>/<version>/conf を基準にしたエージェントトラストストアの相対パス P。デフォルトの <agent_home>/<version_number>/conf/cacerts.jks 以外のトラストストアを使用する場合は必須です。

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

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

構成の変更が完了したら、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>
CODE

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

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

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

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

    例:

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

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
    CODE
  • 自己署名証明書を使用する場合:

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

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

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

Java エージェントと分析エージェント間の 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
    CODE

    次に例を示します。

    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
    CODE

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

JavaエージェントTruststoreの保護

Java エージェント Truststore の改ざんを防ぐには、次の手順を実行する必要があります。

  • ファイルシステムの権限を通じた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/
    CODE

SSL問題の解決

TLS/SSL のバージョンで問題が発生した場合は、「Java エージェントとコントローラ間の SSL 互換性」および「AppDynamics エージェント SSL プロトコル」を参照してください。