postgresql - 那么这个SSL/Secure是如何建立的呢?

标签 postgresql azure

已验证的AZ pg require_secure_transport =“on”

没有任何 ssl 且没有 SET PGSSLMODE=require,Windows cmd 中的以下命令成功:

pg_restore  --format=custom -d "port=5432 host=mypg.postgres.database.azure.com user=myuser dbname=mydb" my.dump

检查 AZ 的 Log Analytics 工作区显示

connection authorized: user=myuser database=mydb application_name=pg_restore SSL enabled (protocol=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384, bits=256, compression=off)

那么这个 SSL/Secure 是如何建立或启用但操作不在 SSL channel 上的呢?

最佳答案

pg_restore 基于 libpq,并遵循其在这方面的约定。未设置的 sslmode 具有默认行为“prefer”。它首先尝试建立 SSL 连接,然后仅在第一次尝试失败时尝试不使用 SSL。因此,只要第一次尝试成功,“首选”与“要求”相同。如果您想证明服务器设置 require_secure_transport = "on" 正在执行某些操作,则应尝试在客户端上设置 sslmode=disable。然后您应该会看到由客户端和服务器之间的不匹配导致的失败。

在您的评论中提到了 sslcert 和 sslkey。这些仅用于客户端证书身份验证。这是可选的,不寻常的,据我所知,Azure 托管的 PostgreSQL 甚至不支持。 SSL 通常仅使用服务器证书完成,而不使用客户端证书(例如,几乎所有通过 https 的 Web 都仅使用服务器证书,而不仅仅是 PostgreSQL)。

libpq(在 SSL 领域)的不同寻常之处在于,默认情况下,不需要验证服务器的证书。默认情况下,证书仅用作协商类似 Diffie-Hellman 的 key 交换的方式,可保护您免遭窃听,但不能防止假冒。如果您想验证连接的服务器是否正确,则需要设置 sslmode=verify-full 并配置 sslrootcert。这一切都由客户端控制。虽然服务器可以坚持要求客户端使用 SSL,但它无法坚持要求客户端实际验证服务器的证书。

关于postgresql - 那么这个SSL/Secure是如何建立的呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70280463/

相关文章:

postgresql - 如何在 Aqueduct 和 Postgres 中使用不同的表名

postgresql - 为什么 SERIAL 不能处理 Postgres 中的这个简单表?

azure - Windows 2019 IIS On Premise Application Insight 监视器状态

c# - Azure Function,返回状态码+JSON,无需在每个逻辑部分定义返回

azure - 部署后,如何确定应用程序服务是 Windows 还是 Linux?

javascript - 如何从选项列表中获取一项

java - 如何使用 jOOQ 基于复合数据类型构建条件?

Postgresql - PSQL 编码问题

Azure Functions - 配置客户端证书身份验证

azure - Azure 上的经典 ASP 网站 "The page cannot be displayed because an internal server error has occurred."