你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

排查 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 Database for PostgreSQL 灵活服务器实例的 TLS 使用情况的全部信息,涵盖按进程、客户端和应用程序分类的数据。

SELECT datname as "Database name", usename as "User name", ssl, client_addr, application_name, backend_type
   FROM pg_stat_ssl
   JOIN pg_stat_activity
   ON pg_stat_ssl.pid = pg_stat_activity.pid
   ORDER BY ssl;

使用 OpenSSL 测试 TLS 连接

若要进行测试,请使用 openssl 命令连接到 Azure Database for PostgreSQL 并显示 TLS 证书。

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

此命令输出低级别协议信息,例如 TLS 版本和密码。 必须使用此选项 -starttls postgres。 否则,此命令将报告未使用 TLS。 使用此命令至少需要 OpenSSL 1.1.1。

只读副本

当根 CA 迁移到 Microsoft RSA 根 CA 2017 时,如果主服务器是之前创建的,则新创建的副本可以使用比主服务器更新的根 CA 证书。 对于使用 sslmode=verify-casslmode=verify-full 配置设置的客户端,需要接受新的和以前的根 CA 证书,直到在新的和现有服务器上完成轮换。

疑难解答

  1. 重现问题。
  2. 收集诊断数据,例如客户端错误消息、psql 输出、OpenSSL s_client输出和服务器日志。
  3. 验证服务器参数,包括require_secure_transportssl_min_protocol_versionssl_max_protocol_version
  4. 验证证书链和客户端 sslmodesslrootcert 设置,以查明协议版本、密码套件或缺失或轮换证书不匹配的情况。

TLS 连接错误

  1. 请识别您或用户尝试从客户端通过 TLS 加密访问您的 Azure Database for PostgreSQL 灵活服务器实例时所看到的错误消息。 根据应用程序和平台的不同,错误消息可能有所不同。 在许多情况下,它们指向根本问题。
  2. 检查数据库服务器和应用程序客户端的 TLS 配置,确保它们支持兼容的版本和密码套件。
  3. 分析数据库服务器与客户端 TLS 版本与密码套件之间的任何差异或差距。 尝试通过启用或禁用某些选项、升级或降级软件或更改证书或密钥来解决它们。 例如,可能需要根据安全性和兼容性要求在服务器或客户端上启用或禁用特定的 TLS 版本。 可能需要禁用 TLS 1.0 和 TLS 1.1,这被视为不安全和已弃用,并启用 TLS 1.2 和 TLS 1.3,后者更安全、更新式。
  4. 由 Microsoft RSA 根 CA 2017 颁发的最新证书具有一个由 Digicert 全局根 G2 CA 交叉签名的中间证书。 某些 Postgres 客户端库在使用 sslmode=verify-fullsslmode=verify-ca 设置时,可能会遇到与中间证书交叉签名的根 CA 证书的连接失败。 结果是备用信任路径。

若要解决这些问题,请将所有必要的证书添加到客户端证书存储或显式指定 sslrootcert 参数。 或者,将 PGSSLROOTCERT 环境变量设置为本地路径,其中将Microsoft RSA 根 CA 2017 根 CA 证书放置在默认值中 %APPDATA%\postgresql\root.crt

证书颁发机构问题

注释

如果不在客户端应用程序连接字符串中使用 sslmode=verify-fullsslmode=verify-ca 设置,证书轮换不会影响你。 因此,无需执行本部分中的步骤。

  1. 在受信任的根存储中创建证书列表。
  2. 如果您有单个中间证书或单个 PostgreSQL 服务器证书,那么您正在使用证书钉扎。 此配置不受支持。
  3. 要删除证书锁定,请从受信任的根存储中删除所有证书,然后仅添加根 CA 证书

如果在执行这些步骤后遇到问题,请联系 Microsoft支持人员。 在标题中包含 ICA 旋转 2026

证书锁定问题

如果不在客户端应用程序连接字符串中使用 sslmode=verify-fullsslmode=verify-ca 设置,证书轮换不会影响你。 因此,无需执行本部分中的步骤。

  1. 验证是否在应用程序中使用证书固定。
  2. 在受信任的根存储中创建证书列表。 例如:
    • 以编程方式获取 Java 密钥存储中受信任的证书的列表。
    • 检查 cacerts java 密钥存储,查看它是否已包含所需的证书。
  3. 如果您具有单个中间证书或单个 PostgreSQL 服务器证书,您就正在使用证书钉扎。
  4. 若要删除证书绑定,请从受信任的根存储中删除所有证书并添加新证书。
  5. 可以从Microsoft的官方存储库下载更新的证书:Azure 证书颁发机构详细信息。

如果在执行这些步骤后遇到问题,请联系Microsoft支持人员。 在标题中包含 ICA 旋转 2026

验证证书链

旧链

  • DigiCert 全球根证书 G2
    • Microsoft Azure RSA TLS 颁发 CA 03 / 04 / 07 / 08
    • 服务器证书

新链

  • DigiCert 全球根证书 G2
    • Microsoft TLS RSA 根证书 G2
    • Microsoft TLS G2 RSA CA OCSP 02 / 04 / 06 / 08 / 10 / 12 / 14 / 16
    • 服务器证书