Azure Database for PostgreSQL 要求所有用戶端連線必須使用 TLS,這是一種業界標準協定,能加密資料庫伺服器與用戶端應用程式之間的通訊。 TLS 取代了舊有的 SSL 協定,僅 TLS 版本 1.2 和 1.3 被認可為安全。 TLS 安全的完整性建立在三大支柱之上:
- 只使用 TLS 版本 1.2 或 1.3。
- 用戶端會驗證由憑證授權單位 (CA) 核發的伺服器 TLS 憑證,該憑證位於由受信任根 CA 起始的 CA 鏈結中。
- 在伺服器與客戶端之間協商一套安全的密碼套件。
受信任的根憑證與憑證更新
這很重要
Microsoft 開始為 Azure Database for PostgreSQL 進行 TLS 憑證輪替 ,以更新中間的 CA 憑證及其產生的憑證鏈。 根CA保持不變。
如果你的客戶端設定使用 TLS 的推薦配置,你就不需要採取任何行動。
證書輪替時間表
- Azure 地區(美國中西部、東亞及英國南部)於 2025 年 11 月 11 日開始 TLS 證書輪替。
- 自 2026 年 1 月 19 日起,此證書輪替計畫將擴展至剩餘(中國除外)區域,包括 Azure 政府。
- 2026 年春節 (農曆新年) 後,中國各個區域也將進行憑證輪替,包括對其中一個根 CA 的變更。
Azure Database for PostgreSQL 使用的根 CA
根憑證授權中心是憑證鏈中的頂層權威機構。 Azure Database for PostgreSQL 目前使用由中介 CA(ICA)簽發的雙重簽署憑證,並以以下根憑證為錨點:
中國地區目前使用以下 CA:
- Microsoft RSA Root CA 2017
- DigiCert 全域根 CA
- 2026 年春節 (農曆新年) 後:Digicert 全域根 G2。 事先做好準備,將新的根 CA 加入到你信任的根證書存儲庫中。
中級憑證授權機構 (Intermediate Certificate Authorities)
Azure Database for PostgreSQL 使用中介 CA(ICA)來發出伺服器憑證。 為了維護安全,Microsoft 會定期輪換這些 ICA 及其發出的伺服器憑證。 這些輪調是例行公事,不會事先公告。
目前中級會計師 DigiCert Global Root CA (見 證書輪調)的輪調自2023年11月開始,預計於2024年第一季完成。 如果你 遵循了建議的做法,那麼這項改變就不需要改變你的環境。
舊證書授權機構鏈
不要在你信任的根目錄中使用中間的 CA 或伺服器憑證。
DigiCert Global Root G2Microsoft Azure RSA TLS Issuing CA 03 / 04 / 07 / 08- 伺服器憑證
新 CA 憑證鏈
不要在你信任的根目錄中使用中間的 CA 或伺服器憑證。
DigiCert Global Root G2Microsoft TLS RSA Root G2Microsoft TLS G2 RSA CA OCSP 02 / 04 / 06 / 08 / 10 / 12 / 14 / 16- 伺服器憑證
讀取複本
Root CA 從 DigiCert Global Root CA 遷移到 DigiCert Global Root G2 並非所有地區都完成。 因此,新建立的讀取副本可能會使用比主伺服器更新的根 CA 憑證。 你應該把 DigiCert Global Root CA 加入讀取副本的可信儲存庫中。
憑證鏈結
憑證鏈是由受信任的憑證授權機構(CA)所頒發的一系列階層式憑證。 該鏈條從根 CA 開始,該 CA 會發出中介 CA(ICA)憑證。 ICA可以為下層ICA發出證書。 鏈中最低的 ICA 會發行個別伺服器憑證。 你透過驗證鏈中每張憑證直到根 CA 憑證,來建立信任鏈。
減少連接故障
使用推薦的 TLS 配置有助於降低因憑證輪替或中介 CA 變更而導致連線失敗的風險。 具體來說,避免信任中介憑證或個別伺服器憑證。 這些做法在 Microsoft 更新憑證鏈時,可能導致意外的連線問題。
這很重要
Microsoft 會提前宣布根憑證的變更,以協助你準備客戶端應用程式。 不過,伺服器憑證輪替和中介CA的變更是例行的,且不會被公告。
謹慎
使用 不支援的(用戶端)設定會導致 意外連線失敗。
TLS 推薦配置
最佳配置
- 透過將伺服器參數設
ssl_min_protocol_version為TLSv1.3來強制執行最新且最安全的 TLS 版本。 - 用於
sslmode=verify-allPostgreSQL 連線以確保完整的憑證與主機名稱驗證。 視您使用私人端點或虛擬網路整合的 DNS 組態而定,可能無法執行verify-all。 因此,你可以選擇verify-ca替代方案。 - 務必在 你信任的根目錄庫中維護完整的 Azure 根憑證。
良好配置
- 將伺服器參數設
ssl_min_protocol_version為TLSv1.3。 如果你必須支援 TLS 1.2,就不要設定最小版本。 - 使用
sslmode=verify-all或sslmode=verify-ca用於 PostgreSQL 連線以確保完整或部分憑證驗證。 - 確保受信任的根儲存庫包含目前 Azure 資料庫用於 PostgreSQL 的根 CA 憑證:
有支援,但不推薦
請勿使用下列組態:
- 透過設定
require_secure_transport為 ,OFF並將用戶端設定為sslmode=disable,來停用 TLS。 - 使用用戶端
sslmode設定disable、allow、prefer或require,可能讓你的應用程式易受中間人攻擊。
不支援配置;不要使用
Azure PostgreSQL 不會公告關於中間 CA 變更或個別伺服器憑證輪替的變更。 因此,以下配置在使用sslmode設定verify-ca或verify-all時不受支持:
- 於受信任存放區內使用中繼 CA 憑證。
- 使用憑證關聯,例如在受信任存放區中使用個別伺服器憑證。
謹慎
每當 Microsoft 更改憑證鏈的中介 CA 或輪換伺服器憑證時,你的應用程式就會無預警地無法連接到資料庫伺服器。
憑證釘選問題
備註
如果你沒有在客戶端應用程式的連接字串中使用 sslmode=verify-full OR sslmode=verify-ca 設定,憑證輪替不會影響你。 因此,您不需要遵循本節中的步驟。
切勿在您的應用程式中使用憑證綁定,因為這樣做會干擾憑證輪替,例如當前中介CA的憑證更換。 如果您不知道「憑證鎖定」是什麼,那麼您很可能沒有使用它。 若要檢查憑證關聯:
- 產生您受信任根存放區中的憑證清單。
- 為 Java 應用程式合併並更新根憑證。
- 在你的客戶端電腦上開啟受信任的根目錄,匯出憑證清單。
- 如果您的受信任根存放區中有中繼 CA 憑證或個別 PostgreSQL 伺服器憑證,即代表您正在使用憑證關聯。
- 要移除憑證釘選,請從你受信任的根儲存庫移除所有憑證,並新增 推薦的根 CA 憑證。
如果你在完成這些步驟後仍因中介憑證出現問題,請聯絡 Microsoft 客服。 請在標題中包含 ICA Rotation 2026。
TLS 的其他考量
除了核心的 TLS 設定與憑證管理外,還有其他幾個因素會影響 PostgreSQL Azure Database 加密連線的安全性與行為。 了解這些考量有助於你在環境中對 TLS 實施做出明智決策。
不安全和安全的 TLS 版本
全球數個政府實體會維護 TLS 關於網路安全性的指導方針。 在美國,這些組織包括衛生及公共服務部和國家標準暨技術研究院。 TLS 提供的安全性層級受到 TLS 通訊協定版本和所支援的加密套件影響最大。
Azure Database for PostgreSQL 支援 TLS 版本 1.2 和 1.3。 在 RFC 8996 中,網際網路工程任務小組(IETF)明確表示不得使用 TLS 1.0 和 TLS 1.1。 這兩個通訊協定已在 2019 年底被取代。 所有使用早期不安全版本 TLS 協定(如 TLS 1.0 和 TLS 1.1)的入站連線,預設都會被拒絕。
IETF 於 2018 年 8 月在 RFC 8446 發布了 TLS 1.3 規範,而 TLS 1.3 是推薦版本,因為它比 TLS 1.2 更快且更安全。
雖然我們不建議這麼做,但如果需要,你可以關閉用于連接至 Azure Database for PostgreSQL 的 TLS。 您可以將 require_secure_transport 伺服器參數更新為 OFF。
這很重要
使用最新版本的 TLS 1.3 來加密你的資料庫連線。 您可以透過將伺服器參數設為ssl_min_protocol_version 來指定最低的 TLS 版本為TLSv1.3。 不要設定 ssl_max_protocol_version 伺服器參數。
加密套件
密碼套件是一組包含密碼、金鑰交換演算法和雜湊演算法的演算法。 將它們與 TLS 憑證及 TLS 版本一起使用,以建立安全的 TLS 連線。 大多數 TLS 用戶端與伺服器支援多個密碼套件,有時甚至支援多個 TLS 版本。 在建立連線時,客戶端與伺服器 會透過握手協商 TLS 版本與密碼套件以供使用。 在握手過程中,會進行以下步驟:
- 客戶端會寄來一份可接受的密碼套件清單。
- 伺服器會從列表中選擇最佳密碼套件,並通知用戶端該選擇。
Azure Database for PostgreSQL 中沒有的 TLS 功能
目前,Azure Database for PostgreSQL 尚未實作以下 TLS 功能:
- 基於 TLS 憑證的客户端身份验证,通過 TLS 與相互認證(mTLS)。
- 自訂伺服器憑證(自備 TLS 憑證)。