Azure Database for PostgreSQL シングル サーバーのルート CA の変更について

適用対象: Azure Database for PostgreSQL - 単一サーバー

重要

Azure Database for PostgreSQL - シングル サーバーは廃止パスにあります。 Azure Database for PostgreSQL - フレキシブル サーバーにアップグレードすることを強くお勧めします。 Azure Database for PostgreSQL - フレキシブル サーバーへの移行の詳細については、Azure Database for PostgreSQL 単一サーバーの現状に関するページを参照してください。

Azure Database for PostgreSQL シングル サーバーでは、標準のメンテナンスとセキュリティのベスト プラクティスの一環として、2022 年 12 月 (2022/12) 以降にルート証明書の変更を予定しています。 この記事では、変更、影響を受けるリソース、アプリケーションでデータベース サーバーへの接続を確実に維持するために必要な手順について、詳しく説明します。

ルート証明書の更新が必要な理由

従来、Azure Database for PostgreSQL のユーザーが PostgreSQL サーバーへの接続に使用できるのは、こちらにある定義済みの証明書のみでした。 ただし、証明機関 (CA) ブラウザー フォーラムから最近、CA ベンダーによって発行された複数の証明書が準拠していないことを示すレポートが公開されました。

業界のコンプライアンス要件に従い、CA ベンダーは準拠していない CA の CA 証明書の取り消しを始めており、サーバーでは、準拠している CA で発行され、それらの準拠している CA からの CA 証明書によって署名された証明書が使用される必要があります。 Azure Database for PostgreSQL にはこれらの準拠していない証明書の 1 つが使用されていたため、Postgres サーバーへの潜在的な脅威を最小限に抑えるために、証明書を準拠バージョンにローテーションする必要がありました。

新しい証明書は 2022 年 12 月 (2022/12) からロールアウトされ、有効になっています。

2022 年 12 月 (2022/12) からどのような変更の実行が計画されていましたか?

2022 年 12 月からは、BaltimoreCyberTrustRoot ルート証明書DigiCertGlobalRootG2 ルート証明書と呼ばれる準拠バージョンに置き換えられます。 お使いのアプリケーションでデータベース クライアント接続の sslmode パラメーターの値として verify-ca または verify-full を利用する場合、接続を維持するために、指示に従って証明書ストアに新しい証明書を追加する必要があります。

接続を維持するためにクライアントに変更を加える必要はありますか?

クライアント側では、コードやアプリケーションの変更は必要ありません。 以下に示す証明書更新の推奨事項に従った場合でも、結合された CA 証明書から BaltimoreCyberTrustRoot 証明書が削除されない限り、接続を継続できます。 接続を維持するための通知があるまで、結合された CA 証明書から BaltimoreCyberTrustRoot を削除しないことをお勧めします。

クライアント証明書に変更を加える必要がありますか

既定では、PostgreSQL でサーバー証明書の検証は実行されません。 つまり、理論的には、クライアントが知らなくても、(DNS レコードを変更したりサーバー IP アドレスを乗っ取ったりするなどして) サーバー ID をスプーフィングすることは可能です。 スプーフィングの可能性を防ぐには、クライアントで SSL 証明書の検証を使用する必要があります。 このような検証は、アプリケーション クライアント接続文字列の ssl モードの値 (verify-ca または verify-full) を使用して設定できます。 これらの ssl モードの値が選択されている場合は、次のセクションの指示に従う必要があります。

クライアント証明書の更新に関する推奨事項

  • 以下のリンクから、BaltimoreCyberTrustRoot と DigiCertGlobalRootG2 のルート CA をダウンロードします。

  • 必要に応じて、将来に中断が起こらないよう、信頼されたストアに次のルートを追加することもお勧めします。

  • BaltimoreCyberTrustRootDigiCertGlobalRootG2 の両方の証明書が含まれる、結合された CA 証明書ストアを生成します。

    • DefaultJavaSSLFactory を使用する Java (PostgreSQL JDBC) ユーザーの場合は、以下を実行します。

      keytool -importcert -alias PostgreSQLServerCACert  -file D:\BaltimoreCyberTrustRoot.crt.pem  -keystore truststore -storepass password -noprompt
      
      keytool -importcert -alias PostgreSQLServerCACert2  -file D:\DigiCertGlobalRootG2.crt.pem -keystore truststore -storepass password  -noprompt
      

      次に、元のキーストア ファイルを、新しく生成されたものに置き換えます。

      • System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
      • System.setProperty("javax.net.ssl.trustStorePassword","password");
    • Windows の .NET (Npgsql) ユーザーの場合は、Baltimore CyberTrust RootDigiCert Global Root G2 の両方が Windows 証明書ストアの信頼されたルート証明機関に存在することを確認します。 いずれかの証明書が存在しない場合は、不足している証明書をインポートします。

      Azure Database for PostgreSQL の .net 証明書

    • SSL_CERT_DIR を使用する Linux 上の .NET (Npgsql) ユーザーの場合は、BaltimoreCyberTrustRootDigiCertGlobalRootG2 の両方が SSL_CERT_DIR によって示されるディレクトリに存在することを確認します。 いずれかの証明書が存在しない場合は、不足している証明書ファイルを作成します。

    • その他の PostgreSQL クライアント ユーザーの場合は、次の形式のような 2 つの CA 証明書ファイルをマージできます


      -----証明書開始-----
      (ルート CA1: BaltimoreCyberTrustRoot.crt.pem)
      -----証明書終了-----
      -----証明書開始-----
      (ルート CA2: DigiCertGlobalRootG2.crt.pem)
      -----証明書終了-----

  • 元のルート CA pem ファイルを、結合されたルート CA ファイルに置き換えて、アプリケーションやクライアントを再起動します。

  • 将来的に、サーバー側に新しい証明書がデプロイされた後は、CA pem ファイルを DigiCertGlobalRootG2.crt.pem に変更することができます。

Note

証明書の変更が行われるまでは、Baltimore 証明書を破棄または変更しないでください。 変更が完了すると、Microsoft からメッセージが送信されます。それ以降は、Baltimore 証明書を破棄してもかまいません。

BaltimoreCyberTrustRoot 証明書を削除した場合はどうなりますか?

Azure Database for PostgreSQL サーバーへの接続時に、接続エラーを受け始める可能性があります。 接続を維持するには、BaltimoreCyberTrustRoot 証明書を使用してもう一度 SSL を構成する必要があります。

よく寄せられる質問

1.SSL/TLS を使用していない場合でも、ルート CA を更新する必要がありますか?

SSL/TLS を使用していない場合は、何も行う必要は必要ありません。

2.SSL/TLS を使用している場合、ルート CA を更新するには、データベース サーバーを再起動する必要がありますか?

いいえ。新しい証明書を使い始めるために、データベース サーバーを再起動する必要はありません。 これはクライアント側の変更であり、確実にデータベース サーバーに接続できるよう、受信クライアント接続で新しい証明書を使用する必要があります。

3.ルート証明書の検証で SSL/TLS を使用しているかどうかはどうすればわかりますか?

お使いの接続で、接続文字列を確認するとルート証明書が検証されているかどうかを、確認することができます。

  • 接続文字列に sslmode=verify-ca または sslmode=verify-full が含まれている場合は、証明書を更新する必要があります。
  • 接続文字列に sslmode=disablesslmode=allowsslmode=prefer、または sslmode=require が含まれている場合は、証明書を更新する必要はありません。
  • 接続文字列で sslmode が指定されていない場合は、証明書を更新する必要はありません。

接続文字列が抽象化されるクライアントを使用している場合、証明書が検証されているかどうかを確認するには、クライアントのドキュメントを参照してください。 PostgreSQL の sslmode を理解するには、PostgreSQL のドキュメントで SSL モードの説明をご確認ください。

4.Azure Database for PostgreSQL で App Service を使用している場合、どのような影響がありますか?

Azure App Services で Azure Database for PostgreSQL に接続している場合、アプリケーションでの SSL の使用方法により、2 つのシナリオが考えられます。

  • この新しい証明書は、プラットフォーム レベルで App Service に追加されています。 App Service プラットフォームに含まれる SSL 証明書をアプリケーションで使用している場合は、何もする必要はありません。
  • SSL 証明書ファイルへのパスをコードに明示的に含めている場合は、新しい証明書をダウンロードし、新しい証明書を使用するようにコードを更新する必要があります。このシナリオの好例は、App Service ドキュメントで共有されている、App Service でカスタム コンテナーを使用する場合です。

5.Azure Database for PostgreSQL で Azure Kubernetes Services (AKS) を使用している場合、どのような影響がありますか?

Azure Kubernetes Services (AKS) を使用して Azure Database for PostgreSQL に接続しようとしている場合は、専用の顧客ホスト環境からのアクセスに似ています。 こちらの手順を参照してください。

6.Azure Data Factory を使用して Azure Database for PostgreSQL に接続している場合、どのような影響がありますか?

Azure Integration Runtime を使用しているコネクタでは、Azure でホストされる環境内の Windows 証明書ストアの証明書が利用されています。 これらの証明書は、新しく適用される証明書と既に互換性があるため、何もする必要はありません。

接続文字列に SSL 証明書ファイルへのパスを明示的に含めるセルフホステッド統合ランタイムを使用しているコネクタでは、新しい証明書をダウンロードし、それを使用するように接続文字列を更新する必要があります。

7.この変更では、データベース サーバーのメンテナンス ダウンタイムを計画する必要がありますか?

いいえ。 ここでの変更は、データベース サーバーに接続するためにクライアント側でのみ行うものなので、この変更のためにデータベース サーバーでメンテナンス ダウンタイムは必要ありません。

8. 2022 年 11 月 30 日より後に新しいサーバーを作成する場合、影響はありますか?

2022 年 11 月 30 日 より後に作成されたサーバーの場合、アプリケーションで SSL を使用して接続できるように、BaltimoreCyberTrustRoot が、データベース クライアント SSL 証明書ストアの新しい DigiCertGlobalRootG2 ルート証明書とともに引き続き使用されます。

9.Microsoft はどのくらいの頻度で証明書を更新しますか、または有効期限ポリシーはどのようなものですか?

Azure Database for PostgreSQL によって使用されるこれらの証明書は、信頼された証明機関 (CA) によって提供されます。 そのため、これらの証明書のサポートは、CA によるこれらの証明書のサポートに関連付けられています。 BaltimoreCyberTrustRoot 証明書は 2025 年に有効期限が切れる予定であるため、Microsoft は有効期限が切れる前に証明書の変更を実行する必要があります。 また、これらの事前定義された証明書に予期しないバグがある場合、Microsoft は、サービスが常に安全で準拠していることを確保するために、2021 年 2 月 15 日に実行された変更と同様に、できるだけ早く証明書のローテーションを行う必要があります。

10. 読み取りレプリカを使用している場合、この更新を行う必要があるのはプライマリ サーバーだけですか? または、読み取りレプリカでも必要ですか?

この更新はクライアント側の変更であるため、レプリカ サーバーからデータを読み取るためにクライアントを使用している場合は、それらのクライアントにも変更を適用する必要があります。

11.SSL が使用されているかどうかを確認するためのサーバー側クエリはありますか?

サーバーへの接続に SSL 接続を使用しているかどうかを確認するには、SSL の検証に関する記事を参照してください。

12.証明書ファイルに DigiCertGlobalRootG2 が既に含まれている場合、必要なアクションはありますか?

いいえ。 証明書ファイルに DigiCertGlobalRootG2 が既に含まれている場合、必要なアクションはありません。

13. サーバーから送信された証明書を確認するにはどうすればよいですか?

使用できるツールは多数あります。 たとえば、DigiCert には、任意のサーバー名の証明書チェーンを表示する便利なツールがあります。 (このツールは、パブリックにアクセス可能なサーバーでのみ機能します。仮想ネットワーク (VNET) に含まれているサーバーに接続することはできません)。 使用できるもう 1 つのツールが、コマンド ラインの OpenSSL です。以下の構文を使用して証明書を確認できます。

openssl s_client -starttls postgres -showcerts -connect <your-postgresql-server-name>:5432

14. さらに質問がある場合はどうすればよいですか?

質問がある場合は、Microsoft Q&A でコミュニティの専門家から回答を得ることができます。 サポート プランに加入していて技術的な支援が必要な場合は、サポート リクエストを作成してください。

  • [問題の種類] で、 [技術] を選択します。
  • [サブスクリプション] で、ご使用の "サブスクリプション" を選択します。
  • [サービス] で [使用中のサービス] を選択し、[Azure Database for PostgreSQL - シングル サーバー] を選択します。
  • [問題の種類] で、[セキュリティ] を選択します。
  • [問題のサブタイプ] で、[Azure Encryption and Infrastructure Double Encryption] (Azure 暗号化とインフラストラクチャの二重暗号化) を選択します