更新 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器中的應用程式用戶端憑證

當你將應用程式連接到 適用於 PostgreSQL 的 Azure 資料庫 時,應用程式客戶端必須安裝受信任的根憑證。 以下章節將引導您如何更新應用程式的受信任根憑證。 此流程是應用程式連線至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器時的常見情境。

這很重要

Microsoft 正在輪換 適用於 PostgreSQL 的 Azure 資料庫 的 TLS 憑證 ,以更新憑證授權中心及其產生的憑證鏈。

如果你的客戶端設定使用 了 TLS 的推薦配置,你就不需要採取行動。

中級證書輪調時間表:

  • Azure 區域、美國中西部及東亞的更新已完成。
  • 英國南部及美國政府區域的更新將於2026年1月21日開始。
  • 中部美國地區的更新將於2026年1月26日開始。
  • 其他地區的更新將於2026年1月28日開始。

根憑證輪替排程:

  • 中國地區根CA憑證從DigiCert全球根CA(G1)更新至DigiCert全球根G2的更新將自2026年3月9日起生效。

在用戶端的 Java 金鑰儲存庫中匯入根 CA 憑證,用於憑證釘選場景

自訂撰寫的 Java 應用程式會使用預設金鑰存放區 (稱為 cacerts),其中包含信任的憑證授權單位 (CA) 憑證。 它通常也稱為 Java 信任存放區。 一個名為 cacerts 的憑證檔案位於安全屬性目錄中,java.home\lib\security其中 java.home 是執行環境目錄(SDK 中的目錄或 jre Java ™ 2 執行環境的頂層目錄)。 若要更新 PostgreSQL 用戶端憑證關聯案例中所用的用戶端根 CA 憑證,請遵循以下指示:

  1. 檢查 cacerts Java 金鑰庫是否已經包含所需的憑證。 您可以使用以下指令在 Java 金鑰庫中列出憑證:

      keytool -list -v -keystore ..\lib\security\cacerts > outputfile.txt
    

    如果客戶端的 Java 金鑰儲存庫中沒有必要的憑證(你可以在輸出中確認),請依照以下指示操作:

  2. 製作自訂金鑰存放區的備份複本。

  3. 下載憑證,並將其儲存在本機中以便參考。

  4. 產生一個包含所有必要根憑證的合併CA憑證庫。 以下範例示範 PostgreSQL JDBC 使用者如何使用 DefaultJavaSSLFactory。

        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootG2.crt.pem   -keystore truststore -storepass password -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert2  -file "D:\ Microsoft ECC Root Certificate Authority 2017.crt.pem" -keystore truststore -storepass password  -noprompt
    
        keytool -importcert -alias PostgreSQLServerCACert  -file D:\ DigiCertGlobalRootCA.crt.pem   -keystore truststore -storepass password -noprompt
    
  5. 將原始金鑰存放區檔案換成新產生的檔案:

    System.setProperty("javax.net.ssl.trustStore","path_to_truststore_file");
    System.setProperty("javax.net.ssl.trustStorePassword","password");
    
  6. 將原本的根 CA PEM 檔案替換成合併的根 CA 檔案,然後重新啟動你的應用程式或用戶端。

    如需使用 PostgreSQL JDBC 驅動程式設定用戶端憑證的詳細資訊,請參閱此文件。

    備註

    若要將憑證匯入用戶端憑證存放區,您可能必須將憑證 .crt 檔案轉換成 .pem 格式。 您可使用 OpenSSL 公用程式進行這些檔案轉換。

以程式設計方式取得 Java 金鑰存放區中受信任的憑證清單

預設情況下,Java 會將受信任憑證儲存在一個名為 cacerts Java 的特殊檔案中,該檔案位於用戶端的 Java 安裝資料夾內。 以下範例將 cacerts 讀取並載入 KeyStore 物件:

private KeyStore loadKeyStore() {
    String relativeCacertsPath = "/lib/security/cacerts".replace("/", File.separator);
    String filename = System.getProperty("java.home") + relativeCacertsPath;
    FileInputStream is = new FileInputStream(filename);
    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
    String password = "changeit";
    keystore.load(is, password.toCharArray());

    return keystore;
}

預設密碼cacerts是 changeit,但實際客戶端應該會不同,因為管理員建議安裝 Java 後立即更改密碼。 載入 KeyStore 物件後,使用 PKIXParameters 類別讀取存在的憑證。

public void whenLoadingCacertsKeyStore_thenCertificatesArePresent() {
    KeyStore keyStore = loadKeyStore();
    PKIXParameters params = new PKIXParameters(keyStore);
    Set<TrustAnchor> trustAnchors = params.getTrustAnchors();
    List<Certificate> certificates = trustAnchors.stream()
      .map(TrustAnchor::getTrustedCert)
      .collect(Collectors.toList());

    assertFalse(certificates.isEmpty());
}

在 Azure App Service 中使用用戶端時,更新根 CA 憑證,以用於憑證釘選案例

對於 Azure App Services 連接 適用於 PostgreSQL 的 Azure 資料庫 flexible server 時,有兩種可能嘅情況用以更新客戶端憑證。 情況取決於你在 Azure App Services 部署時如何使用 SSL。

在 Azure Kubernetes Service (AKS)中使用用戶端時更新根 CA 憑證,以進行憑證關聯案例

如果您嘗試使用在 Azure Kubernetes Services (AKS) 中裝載的應用程式連線到適用於 PostgreSQL 的 Azure 資料庫並釘選憑證,這就類似於從專用客戶的主機環境進行存取。 請參閱這裡的步驟。

更新 Windows 上 .NET (Npgsql) 使用者的根 CA 憑證,以進行憑證關聯案例

對於在 Windows 上連線至 適用於 PostgreSQL 的 Azure 資料庫 彈性伺服器的 .NET (Npgsql) 使用者,請確認 Windows 憑證存放區中的「受信任的根憑證授權單位」內是否存在 全部三個 憑證:Microsoft RSA Root Certificate Authority 2017、DigiCert Global Root G2,以及 DigiCert Global Root CA。 如果沒有任何憑證,則請匯入遺漏的憑證。

在憑證關聯案例中更新其他用戶端的根 CA 憑證

對於其他 PostgreSQL 用戶端使用者,您可以使用以下格式合併兩個 CA 憑證檔案:

-----BEGIN CERTIFICATE-----
(Root CA1: DigiCertGlobalRootCA.crt.pem)
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
(Root CA2: Microsoft ECC Root Certificate Authority 2017.crt.pem)
-----END CERTIFICATE-----