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

在 Azure Database for PostgreSQL(单一服务器)中配置 TLS 连接

适用于:Azure Database for PostgreSQL 单一服务器

重要

Azure Database for PostgreSQL - 单一服务器即将停用。 强烈建议升级到 Azure Database for PostgreSQL 灵活服务器。 若要详细了解如何迁移到 Azure Database for PostgreSQL 灵活服务器,请参阅 Azure Database for PostgreSQL 单一服务器的最新动态

Azure Database for PostgreSQL 倾向于使用传输层安全性 (TLS)(以前成为安全套接字层 (SSL))将客户端应用程序连接到 PostgreSQL 服务。 通过在数据库服务器与客户端应用程序之间强制实施 TLS 连接,可以加密服务器与应用程序之间的数据流,这有助于防止“中间人”攻击。

默认情况下,PostgreSQL 数据库服务配置为需要 TLS 连接。 如果客户端应用程序不支持 TLS 连接,则可以选择禁用 TLS。

重要

SSL 中间证书设置为从 2024 年 1 月 31 日 (2024/01/31) 开始更新。 中间证书是由受信任的根颁发的从属证书,专门颁发最终实体证书。 这会得到一个证书链,该链从受信任的根 CA 开始,中间是一个或多个中间 CA,在以颁发给你的 SSL 证书结尾。 证书固定是一种安全技术,实现在建立安全会话时,仅接受已授权或已固定的证书。 使用其他证书建立安全会话的任何尝试都会被拒绝。 我们已经在当前年份完全更新了受信任的根 CA,在此根中,可以使用 verify-ca 或 verify-full 连接字符串客户端指令固定证书。而与此 CA 不同,没有标准成熟的方法来固定中间 CA。 但是在理论上,可以创建自定义连接堆栈,它用各种编程语言将中间证书固定到客户端。 如上所述,你不太可能使用自定义代码来固定中间证书,在这种情况下,你可能会受到此更改的影响。 若要确定是否固定 CA,请参阅证书固定和 Azure 服务

强制实施 TLS 连接

对于通过 Azure 门户或 CLI 预配的所有 Azure Database for PostgreSQL 服务器,默认会强制实施 TLS 连接。

同样,在 Azure 门户中,用户服务器的“连接字符串”设置中预定义了连接字符串,该字符串中包含以通用语言使用 TLS 连接到数据库服务器所需的参数。 TLS 参数因连接器而异,例如“ssl=true”、“sslmode=require”或“sslmode=required”,以及其他变体。

配置强制实施 TLS

(可选)可以禁用强制实施 TLS 连接。 Microsoft Azure 建议始终启用“强制实施 SSL 连接”设置,以增强安全性。

使用 Azure 门户

访问 Azure Database for PostgreSQL 服务器,并选择“连接安全性”。 使用切换按钮来启用或禁用“强制实施 SSL 连接”设置。 然后选择“保存”。

连接安全性 - 禁用强制实施 TLS/SSL

可以通过在“概述”页中查看“SSL 强制实施状态”指示器来确认设置。

使用 Azure CLI

可以通过在 Azure CLI 中分别使用 EnabledDisabled 值来启用或禁用“ssl-enforcement”参数。

az postgres server update --resource-group myresourcegroup --name mydemoserver --ssl-enforcement Enabled

确定 SSL 连接状态

你还可以使用以下查询按进程、客户端和应用程序收集有关 Azure Database for PostgreSQL - 单一服务器实例的 SSL 使用情况的所有信息:

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;

确保应用程序或框架支持 TLS 连接

某些使用 PostgreSQL 作为其数据库服务的应用程序框架在安装期间默认不启用 TLS。 如果 PostgreSQL 服务器强制实施 TLS 连接,但应用程序未配置 TLS,则应用程序可能无法连接到数据库服务器。 请查阅应用程序文档,了解如何启用 TLS 连接。

需要证书验证才可启用 TLS 连接性的应用程序

在某些情况下,应用程序需要具备从受信任的证书颁发机构 (CA) 证书文件生成的本地证书文件才能实现安全连接。 用于连接到 Azure Database for PostgreSQL 的证书位于 https://www.digicert.com/CACerts/BaltimoreCyberTrustRoot.crt.pem 。 下载证书文件并将其保存到首选位置。

请查看以下链接,了解主权云中的服务器证书:Azure 政府由世纪互联运营的 Microsoft AzureAzure 德国

使用 psql 进行连接

以下示例演示如何使用 psql 命令行实用程序连接到 PostgreSQL 服务器。 使用 sslmode=verify-full 连接字符串设置强制实施 TLS/SSL 证书验证。 将本地证书文件路径传递给 sslrootcert 参数。

以下命令是 psql 连接字符串的示例:

psql "sslmode=verify-full sslrootcert=BaltimoreCyberTrustRoot.crt host=mydemoserver.postgres.database.azure.com dbname=postgres user=myusern@mydemoserver"

提示

确认传递给 sslrootcert 的值与你保存的证书的文件路径匹配。

Azure Database for PostgreSQL 单一服务器中的 TLS 强制

对于使用传输层安全性 (TLS) 连接到数据库服务器的客户端,Azure Database for PostgreSQL - 单一服务器支持加密。 TLS 是一种行业标准协议,可确保在数据库服务器与客户端应用程序之间实现安全的网络连接,使你能够满足合规性要求。

TLS 设置

Azure Database for PostgreSQL 单一服务器提供了为客户端连接强制使用 TLS 版本的功能。 若要强制使用 TLS 版本,请使用“最低 TLS 版本”选项设置。 此选项设置允许以下值:

最低 TLS 设置 支持的客户端 TLS 版本
TLSEnforcementDisabled(默认值) 不需要 TLS
TLS1_0 TLS 1.0、TLS 1.1、TLS 1.2 及更高版本
TLS1_1 TLS 1.1、TLS 1.2 及更高版本
TLS1_2 TLS 版本 1.2 及更高版本

例如,将此最低 TLS 设置版本设置为 TLS 1.0 意味着服务器将允许使用 TLS 1.0、1.1 和 1.2 + 的客户端进行连接。 也可将此选项设置为 1.2,这意味着仅允许那些使用 TLS 1.2+ 的客户端进行连接,将拒绝使用 TLS 1.0 和 TLS 1.1 进行的所有连接。

注意

默认情况下,Azure Database for PostgreSQL 不强制执行最低 TLS 版本要求(设置为 TLSEnforcementDisabled)。

一旦强制实施最低 TLS 版本要求后,以后将无法禁用最低版本强制实施。

若要了解如何为 Azure Database for PostgreSQL 单一服务器指定 TLS 设置,请参阅如何配置 TLS 设置

Azure Database for PostgreSQL 单一服务器的密码支持

作为 SSL/TLS 通信的一部分,将验证密码套件,并且仅允许支持密码套件与数据库服务器通信。 密码套件验证在网关层中控制,而不是在节点本身上显式控制。 如果密码套件与下面列出的某个套件不匹配,系统会拒绝传入的客户端连接。

支持的密码套件

  • TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
  • TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384
  • TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256

后续步骤

Azure Database for PostgreSQL 的连接库中查看各种应用程序连接选项。