排查 TLS 连接失败问题

重要

Microsoft为 Azure Database for PostgreSQL 启动 TLS 证书轮换 ,以更新中间 CA 证书和生成的证书链。 根 CA 保持不变。

如果客户端 配置使用 TLS 的建议配置,则无需执行任何作。

证书轮换计划

  • 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 环境变量从默认值 %APPDATA%\postgresql\root.crt 修改为存储 Microsoft RSA 根 CA 2017 根 CA 证书的本地路径。

证书颁发机构问题

注释

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

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

如果在执行这些步骤后遇到问题,请联系 Azure 支持人员。 在标题中包含 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
    • 服务器证书