在 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。

强制实施 TLS 连接

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

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

配置强制实施 TLS

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

使用 Azure 门户

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

Connection Security - Disable Enforce 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://dl.cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem 。 下载证书文件并将其保存到首选位置。

使用 psql 进行连接

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

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

psql "sslmode=verify-full sslrootcert=DigiCertGlobalRootCA.crt host=mydemoserver.postgres.database.chinacloudapi.cn 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 的连接库中查看各种应用程序连接选项。