共用方式為


更新應用程式用戶端憑證

將應用程式連線到「適用於 PostgreSQL 的 Azure 資料庫」時,應用程式用戶端必須安裝受信任的根憑證。 下列各節將引導您更新應用程式的受信任根憑證,這是應用程式連接到 Azure Database for PostgreSQL 彈性伺服器執行個體時的常見情況。

這很重要

從 2025 年 11 月 11 日開始,下列清單中的 Azure 區域會規劃使用新的中繼 CA 憑證的 TLS/SSL 憑證輪替。

  • 美國中西部
  • 東亞
  • 英國南部

從 2026 年 1 月 19 日開始,此輪替計劃擴展到所有剩餘的 Azure 區域,包括 Azure Government 和所有其他區域。

如需疑難排解的相關資訊,請參閱憑證關聯問題

在用戶端上匯入 Java 金鑰存放區中的根 CA 憑證,以進行憑證關聯案例

自訂撰寫的 Java 應用程式會使用預設金鑰存放區 (稱為 cacerts),其中包含信任的憑證授權單位 (CA) 憑證。 它通常也稱為 Java 信任存放區。 名為 cacerts 的憑證檔案位於安全性屬性目錄 (java.home\lib\security),其中 java.home 是執行階段環境目錄 (SDK 中的 jre 目錄或 Java™ 2 Runtime Environment 的最上層目)。 您可以依照以下指示來更新用於 PostgreSQL 客戶端憑證釘選場景的客戶端根 CA 憑證:

  1. 檢查 cacerts Java 金鑰存放區,查看它是否已經包含必要的憑證。 您可使用下列命令,在 Java 金鑰存放區中列出憑證:

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

    如果用戶端上的 java 金鑰存放區中沒有必要的憑證 (可在輸出中檢查),您應該繼續下列指示:

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

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

  4. 產生包含所有必要根 CA 憑證的合併 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 安裝資料夾內。 下面的範例會先讀取 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 應用程式服務中使用用戶端時更新根 CA 憑證,以進行憑證關聯案例

針對 Azure App Services,當連線到適用於 PostgreSQL 的 Azure 資料庫彈性伺服器執行個體時,我們在更新用戶端憑證時可能會遇到兩種情況,這取決於您如何將 SSL 與部署至 Azure App Services 的應用程式搭配使用。

  • 在您的「適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器」執行個體中發生變更之前,新的憑證會新增至 App Service 平台層級。 如果您要在應用程式中使用 App Service 平台上所含的 SSL 憑證,則無需採取任何動作。 如需詳細資訊,請參閱 Azure App Service 文件中的在 Azure App Service 中新增和管理 TLS/SSL 憑證
  • 如果您在程式碼中明確包含 SSL 憑證檔案的路徑,則必須下載新的憑證,並更新程式碼才能使用它。 此案例的良好範例是在 App Service 中使用自訂容器時,如在 Azure App Service 文件中的教學課程:在 Azure App Service 中設定自訂容器的側車容器所述。

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

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

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

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

在憑證關聯案例中更新其他用戶端的根 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-----