コントローラSSLと証明書
コントローラには事前構成されたHTTPSポート(デフォルトではポート8181)があり、自己署名証明書で保護されています。このページでは、デフォルトの証明書を独自のカスタム証明書に置き換える方法について説明します。
コントローラの SSL と証明書について
実稼働環境での使用においては、自己署名証明書をサードパーティの CA または独自の内部 CA により署名された証明書に置き換えることを推奨します。.NET エージェントをデプロイしている場合は、自己署名証明書では .NET エージェントが動作しないため、自己署名証明書を CA による署名済み証明書に置き換える必要があります。
コントローラ SSL 証明書
コントローラの SSL 証明書は、コマンドラインか、[Configurations] 下の Enterprise Console UI を使用して管理できます。この UI には、[Appserver Configurations] ページ、[Reports Service Configurations] ページ、および [Fleet Management Configurations] ページに、SSL 証明書情報を表示し、[Edit Certificate] オプションを提供するセクションが含まれています。
「コマンドラインを使用した既存のキーペアのキーストアへのインポート」および「Enterprise Console UI を使用した既存のキーペアのキーストアへのインポート」を参照してください。
コントローラキーストアおよびアーティファクト
このページでは、デフォルトのキーストア内の既存の鍵を置き換える方法について説明します。デフォルトのキーストアから既存のアーティファクトを初めてエクスポートし、それを独自のキーストアにインポートする場合を除いては、キーストアの内容をすべて置き換えることは推奨されません。
デフォルトのコントローラキーストアには、次のアーティファクトが含まれています。
- s1as:Glassfish アプリケーションサーバとともに提供される自己署名済み秘密鍵。コントローラはこの鍵を使用してポート 8181 で安全な通信を行う。
- reporting-instance:スケジュールされた報告を有効にする、レポートサービスで使用する秘密鍵。
キーストアのパスワードの更新
キーストアアーティファクトの生成に使用される keystore.jks および cacert.jks ファイルのパスワードを変更できます。両方のファイルのパスワードは同じである必要があります。
ただし、キーストアアーティファクトである reporting-instance によって生成され、レポートサービスによって使用される reporting-service.pfx ファイルのパスワードは変更できません。
キーストアの表示方法
jre/<version>bin ディレクトリにある keytool ユーティリティを使用してキーストアの格納ファイルを確認できます。プロンプトが表示されたら、デフォルトのキーストアパスワードである changeit を入力してください。
keytool -list -v -keystore controller_home/appserver/jetty/etc/ keystore.jks
セキュリティを実装する正確な手順は、通常、組織のセキュリティポリシーにより異なります。たとえば、組織のドメインに使用するワイルドカード証明書など、使用する証明書が組織にすでに存在する場合は、既存の証明書をコントローラキーストアにインポートできます。それ以外の場合は、証明書署名リクエストで新しく生成する必要があります。次のセクションでは、これらのシナリオについて説明します。
はじめに
以下で、コントローラのインストールにバンドルされる Java keytoolユーティリティを使用した SSL の構成方法について説明します。keytool ユーティリティは、<controller_home> と同じレベルのディレクトリにあります。つまり、 <controller_home> から ../jre/<version>/bin に移動します。
この手順では、キーツールがオペレーティングシステムのパス変数にあることを想定しています。このコマンドを実行するには、まずシステムパスに keytool ユーティリティを置く必要があります。オペレーティングシステムに適した方法でkeytoolをパスに追加してください。
このトピックのディレクトリパスにはスラッシュを使用していますが、この手順はLinuxおよびWindowsオペレーティングシステムの環境に適用されます。オペレーティングシステム間でのコマンドの使用方法に違いがある場合は、注意書きがあります。
証明書の作成とCSRの生成
コントローラに使用する証明書がない場合は、次の手順で作成します。
Splunk AppDynamics オンプレミスでは、任意のファイルタイプで機能する X.509 デジタル証明書を使用する必要があります。
この手順では、コントローラのアクティブなキーストア内に新しい証明書が生成され、すぐに有効となります。
この手順はステージング環境で使用するためのものであり、コントローラをシャットダウンして再起動する必要があります。また、ここで説明するように、コントローラのアクティブなキーストアではなく一時的なキーストアにキーを生成することもできます。証明書の署名を受けた後で、キーを一時的なキーストアからコントローラのキーストアにインポートすることができます。
コマンドラインを使用した既存のキーペアのキーストアへのインポート
ここでは、既存の公開鍵と秘密鍵をコントローラキーストアにインポートする方法について説明します。既存の公開鍵と秘密鍵をJavaキーストアと互換性のある形式、たとえばDER形式からPKCS#12に変換する必要があると仮定してこのシナリオを進めます。OpenSSL を使用して公開鍵と秘密鍵を結合し、次にkeytoolを使用して結合キーをコントローラのキーストアにインポートする必要があります。
ほとんどのLinuxディストリビューションにはOpenSSLが付属しています。Windows を使用している場合、または Linux ディストリビューションに OpenSSL が付属していない場合は、OpenSSL の Web サイトから詳細情報を入手してください。
以下のファイルがあることが前提となります。
- 秘密鍵:
private.key - 署名済み公開鍵:
cert.crt - CA ルートチェーン:
ca.crt
次の手順で使用する秘密鍵は、プレーンテキスト形式である必要があります。秘密キーを PKCS12 キーストア形式に変換する場合、デフォルトのパスワード(changeit)を秘密キーに割り当てる必要があります。
-
OpenSSLを使用して、既存の秘密鍵と公開鍵を互換性のあるJavaキーストアに結合します。
openssl pkcs12 -inkeyprivate.key -in cert.crt -export -out keystore.p12 - コントローラが実行中の場合は停止します。
-
keystoreディレクトリに移動します。cd <Controller_home>/appserver/jetty/etc/ -
keystoreファイルのバックアップを作成します。たとえば、Linux の場合は以下を実行します。cp keystore.jks keystore.jks.backupWindowsの場合、同様の方法でコピーコマンドを使用します。
-
デフォルトのキーストアから、エイリアス
s1asを持つ自己署名証明書を削除します。keytool -delete -alias s1as -keystore keystore.jks -
PKCS #12キーをデフォルトのキーストアにインポートします。
keytool -importkeystore -srckeystore keystore.p12 -srcstoretype pkcs12 -destkeystore keystore.jks -deststoretype JKS -
インポートした鍵ペアのエイリアス名を更新します。
エイリアス名は
s1asにする必要があります。この名前から変更しないでください。keytool -changealias -alias"1"-destalias"s1as"-keystore keystore.jks -
インポートした秘密鍵のパスワードを変更します。
keytool -keypasswd -keystore keystore.jks -alias s1as -keypass <.p12_file_password> -new<password>変更した場合、新しい秘密キーのパスワードにデフォルト(
changeit)を使用するか、「キーストアパスワードの変更」の説明に従って設定したマスターパスワードを使用します。 -
「Failed to establish chain from reply(返信からチェーンを確立できません)」というエラーが表示された場合は、発行元の認証ルートと中間証明書をキーストアにインストールします。ルートCAチェーンは、証明書のCA署名の有効性を確立します。ほとんどの一般的なルート CA チェーンは
cacerts.jksトラストストアに含まれますが、追加でルート証明書のインポートが必要になる場合があります。次の手順を実行します。keytool -import-alias <Any_alias> -file <path_to_root_or_intermediate_cert> -keystore <Controller_home>/appserver/jetty/etc/cacerts.jks完了したら署名済み証明書のインポートを再試行します。
- コントローラを起動します。
Enterprise Console UI を使用した既存のキーペアのキーストアへのインポート
- Enterprise Console にログインします。
- [Configurations] > [Controller Settings] > [Appserver Configurations] に移動します。
- [SSL Certificate Management] タブをクリックします。
- [Edit Certificate] をクリックします。
- [Edit Certificate] ポップアップウィンドウで [Certificate Body]、[Certificate Chain (optional)]、および [Private Key] を追加します。
- [Edit Certificate] ポップアップウィンドウで [Save] をクリックします。
- [Appserver Configurations] ページで [Save] をクリックします。
- [Appserver Configurations] ポップアップウィンドウが表示されたら、[OK] をクリックします。
- [Controller Configurations Update] ジョブが完了するまで待ちます。[Jobs] ページでステータスを確認できます。
SSL使用の確認
構成が正常に動作していることを確認するには、ブラウザを使用してデフォルトのセキュアポートであるポート8181を介してコントローラに接続します。
https: //<controller_host>:8181/controller |
コントローラのエントリページがブラウザに正しくロードされていることを確認します。また、ブラウザが安全な接続を確立していることも確認してください。ほとんどのブラウザでは、URLの横のロックアイコンが安全な接続であることを示しています。
コントローラの証明書を変更したら、証明書の公開鍵をエージェントトラストストアにインポートする必要があります。この方法については、エージェントの種類別に用意されているトピックを参照してください。
- EUM アグリゲータ:「ブラウザ RUM のトラブルシュート」
- Java エージェント:「Java エージェント用 SSL の有効化」
- .NET:「.NET エージェント用 SSL の有効化」
プロキシが構成されておらず、エージェントがコントローラ自体の管理下にある場合は、以下の変更も必要になります。
modifyJVMOptions.sh スクリプトを利用して行うこともできます。
キーストアパスワードの変更
コントローラが使用するキーストアのデフォルトのパスワードは、changeit です。これは Jetty キーストアのデフォルトのパスワードであり、よく知られている(つまり安全でない)パスワードです。安全にインストールするには、このパスワードを変更する必要があります。
キーストアのパスワードを変更する場合は、すべてのキーに同じパスワードを設定する必要があります。
デフォルトでは、keystore.jks には s1as および reporting-instance キーが含まれています。
期限切れ証明書の更新
期限切れまたは期限の近づいた証明書を更新する手順は、「証明書の作成と CSR の生成」で説明するデフォルトの証明書を置き換える手順と似ています。期限切れの証明書を更新するには、次の手順を実行します。
信頼ストアとキーストア
- Java 信頼ストアである cacerts には、既知の認証局のルート証明書が含まれています。TLS/SSL(Transport Layer Security/セキュアソケットレイヤ)セッション中に提示された証明書の有効性は、
cacerts.jksで確認されます。cacerts には秘密鍵やパスワードがありません。これらには、認証局の中間証明書とルート証明書が含まれます。 - Java キーストアは、サーバの秘密鍵とアイデンティティ証明書を格納するために使用されます。つまり、キーストアを使用してサーバのクレデンシャルを保存します。
証明書の問題のトラブルシューティング
デフォルトの自己署名証明書を使用する際に問題が発生することがあります。以下の手順に従って問題のトラブルシューティングを行ってください。
Issue: 'net::ERR_CERT_COMMON_NAME_INVALID'
net::ERR_CERT_COMMON_NAME_INVALID '
このエラーは、Windows マシンの [Trusted Root Certification Authorities] の [Certificates] にデフォルトの自己署名証明書をインポートしたとしても表示されます。サブジェクト代替名(SAN)が存在しない場合、Chrome 58 以上および Edge ブラウザは TLS 証明書を信頼しません。
この問題のトラブルシュートを行うには、SAN を使用して証明書を再生成し、Windows マシンの [Trusted Root Certification Authorities] の [Certificates]にインポートする必要があります。
- 次の
keystore.jksファイルをバックアップします。CODE<AppD Home>\Platform\product\controller\appserver\jetty\etc\keystore.jks keystore.jksからs1asエントリを削除します。CODEkeytool -delete -alias s1as -keystore <AppD Home>\Platform\product\controller\appserver\jetty\etc\keystore.jks- 新しいキーペアと
s1asエントリをkeystore.jksに作成し、keystore.jksに追加します。CODEkeytool -genkeypair -alias s1as -keyalg RSA -keystore <AppD Home>\Platform\product\controller\appserver\jetty\etc\keystore.jks -keysize 2048 -validity 1825 -storepass changeit -keypass changeit -dname "CN=<hostname>" -ext "SAN=dns:<hostname>" keystore.jksから証明書をエクスポートします。CODEkeytool -exportcert -alias s1as -keystore keystore.jks -file <AppD Home>\Platform\product\controller\appserver\jetty\etc\keystore_controller.crt -rfc -storepass changeit-
keystore_controller.crt の [Certificate Manager] を開き、[Trusted Root Certification Authorities] 下にある [Certificates] を選択し、インポートします。
- コントローラを再起動します。