TLS 連線失敗可能因多種原因發生,尤其是在 Azure Database for PostgreSQL 計畫進行 TLS 憑證輪替後。 本文將引導你驗證客戶端設定並排解潛在連線問題。
這很重要
Microsoft 開始為 Azure Database for PostgreSQL 進行 TLS 憑證輪替 ,以更新中間的 CA 憑證及其產生的憑證鏈。 根CA保持不變。
如果你的客戶端設定使用 TLS 的推薦配置,你就不需要採取任何行動。
證書輪替時間表
- Azure 地區(美國中西部、東亞及英國南部)於 2025 年 11 月 11 日開始 TLS 證書輪替。
- 自 2026 年 1 月 19 日起,此證書輪替計畫將擴展至剩餘(中國除外)區域,包括 Azure 政府。
- 2026 年春節 (農曆新年) 後,中國各個區域也將進行憑證輪替,包括對其中一個根 CA 的變更。
驗證用戶端設定
為了在任何計畫輪替前驗證你的客戶端設定,務必實作 TLS 的推薦配置。
檢查你的根憑證儲存庫
確保你客戶的根憑證儲存庫包含最低要求的根憑證或完整的根憑證集合。
謹慎
在客戶端的根憑證庫中,只信任 Azure 的根 CA 憑證。 不要相信中介 CA 或個別伺服器憑證。 如果你信任這些憑證,當 Microsoft 更新憑證鏈或輪換個別伺服器憑證時,可能會遇到意想不到的連線問題。
確認 TLS 連線狀態
要判斷你目前的 TLS 連線狀態,載入 sslinfo 擴充功能 ,然後呼叫該 ssl_is_used() 函式來判斷是否正在使用 TLS。 如果連線使用 TLS,函式會回傳 t 。 否則會傳回 f。 您也可以使用以下查詢,依照程序、客戶端及應用程式分類,收集 Azure 資料庫 PostgreSQL 彈性伺服器執行個體的 TLS 使用情況:
SELECT datname AS "Database name",
usename AS "User name",
ssl,
client_addr,
application_name,
backend_type
FROM pg_stat_ssl
INNER JOIN pg_stat_activity
ON pg_stat_ssl.pid = pg_stat_activity.pid
ORDER BY ssl;
使用 OpenSSL 測試 TLS 連線
測試時,請使用 openssl 指令連接 PostgreSQL 的 Azure 資料庫並顯示 TLS 憑證。
openssl s_client -starttls postgres -showcerts -connect <your-postgresql-server-name>:5432
此命令會列印低階通訊協定資訊,例如 TLS 版本和加密。 您必須使用選項 -starttls postgres。 否則,此指令會回報未使用 TLS。 使用此命令至少需要 OpenSSL 1.1.1 版本。
讀取複本
當根 CA 遷移至 Microsoft RSA Root CA 2017 時,若主伺服器是較早建立,新建立的副本可以使用比主伺服器更新的根 CA 憑證。 對於使用 sslmode=verify-ca 和 sslmode=verify-full 配置設置的客戶端,你需要接受新的和舊的根 CA 憑證,直到新的和現有伺服器完成憑證輪換。
疑難排解
- 重現問題。
- 收集診斷資料,例如用戶端錯誤訊息、psql輸出、OpenSSL s_client輸出及伺服器日誌。
- 驗證伺服器參數,包括
require_secure_transport、ssl_min_protocol_version、ssl_max_protocol_version和 。 - 檢查憑證鏈、用戶端
sslmode及sslrootcert設定,以找出協定版本、密碼套件或缺少或輪替憑證的不符。
TLS 連線錯誤
- 識別你或你的使用者在嘗試從用戶端以 TLS 加密存取 Azure Database for PostgreSQL 彈性伺服器實例時看到的錯誤訊息。 視應用程式和平台而定,錯誤訊息可能會不同。 在許多情況下,它們會指向基礎問題。
- 檢查資料庫伺服器和應用程式用戶端的 TLS 設定,確保它們支援相容的版本和密碼套件。
- 分析資料庫伺服器與客戶端 TLS 版本及密碼套件間的任何差異或缺口。 嘗試藉由啟用或停用特定選項、升級或降級軟體,或變更憑證或金鑰來解決問題。 例如,根據安全性與相容性需求,您可能需要啟用或停用伺服器或用戶端的特定 TLS 版本。 你可能需要停用 TLS 1.0 和 TLS 1.1,因為它們被視為不安全且已棄用,並啟用 TLS 1.2 和 TLS 1.3,因為它們更安全且較現代。
-
Microsoft RSA Root CA 2017 發行的最新憑證包含在 Digicert Global Root G2 CA 交叉簽署的鏈的中繼憑證。 某些 Postgres 用戶端程式庫雖然使用
sslmode=verify-full或sslmode=verify-ca設定,但可能會因使用中繼憑證交叉簽署的根 CA 憑證而發生連線失敗。 結果是替代信任路徑。
為了解決這些問題,請將所有必要的憑證加入用戶端憑證儲存庫,或明確指定參數 sslrootcert 。 或者,將 PGSSLROOTCERT 環境變數設定從預設值的 %APPDATA%\postgresql\root.crt 設定為本機路徑,其中放置了 Microsoft RSA Root CA 2017 根 CA 憑證。
憑證授權中心問題
備註
如果你沒有在客戶端應用程式的連線字串中使用 sslmode=verify-full 或 sslmode=verify-ca 設定,憑證輪替不會影響你。
因此,您不需要遵循本節中的步驟。
- 在你信任的根目錄中建立一份憑證清單。
- 例如,您可以 以程式設計方式取得 Java 金鑰儲存庫中的授信憑證清單。
- 例如,您可以 檢查 cacerts java 金鑰儲存庫,以查看它是否已包含必要的憑證。
- 如果有個別的中間憑證或 PostgreSQL 伺服器憑證,那麼您使用的是憑證綁定。 此設定不受支援。
- 要移除憑證釘選,請從受信任的根存放區中移除所有憑證,然後只新增根 CA 憑證。
如果你在完成這些步驟後仍遇到問題,請聯絡 Microsoft 客服。 請在標題中包含 ICA Rotation 2026。
憑證釘選問題
如果你沒有在客戶端應用程式的連線字串中使用 sslmode=verify-full 或 sslmode=verify-ca 設定,憑證輪替不會影響你。 因此,您不需要遵循本節中的步驟。
- 確認你在應用程式中是否使用憑證固釘。
- 在你信任的根目錄中建立一份憑證清單。 例如:
- 用程式化的方式在 Java 金鑰庫取得可信憑證清單。
- 檢查 Cacerts Java 金鑰庫是否已經包含所需的憑證。
- 如果有個別的中間憑證或 PostgreSQL 伺服器憑證,那麼您使用的是憑證綁定。
- 若要移除憑證釘選,請從受信任的根存放區移除所有憑證,然後新增新的憑證。
- 你可以從 Microsoft 官方倉庫下載更新後的憑證:Azure 憑證授權機構詳情。
如果你在完成這些步驟後仍遇到問題,請聯絡 Microsoft 客服。 請在標題中包含 ICA Rotation 2026。
驗證憑證鏈
舊鏈條
- DigiCert 全球根憑證 G2
- Microsoft Azure RSA TLS 發行 CA 03 / 04 / 07 / 08
- 伺服器憑證
新鏈條
- DigiCert 全球根憑證 G2
- 微軟 TLS RSA 根憑證 G2
- Microsoft TLS G2 RSA CA OCSP 02 / 04 / 06 / 08 / 10 / 12 / 14 / 16
- 伺服器憑證