Snowflake Postgres SSL 证书

Snowflake Postgres 通过指向集群的安全 SSL 连接运行。在将客户端和应用程序连接到集群时,请在设置中包含 SSLMODE=require,或为非基于 libpq 的驱动程序使用等效的设置。有关更多详细信息和连接故障排除提示,请参阅 连接到 Snowflake Postgres

为了增加一层安全性,管理员和实例所有者可以检索用于对每个 Snowflake Postgres 服务器的证书进行签名的根 CA(证书颁发机构)的公共证书和私钥对部分。这些根 CA 证书(及其非共享私钥)对于每个 Snowflake 账户都是唯一的。检索后,根 CA 证书可用于对连接时提供的服务器证书进行额外验证,以防止中间人 (MITM) 攻击。

检索 SSL 公共根证书

  1. 在导航菜单中,选择 Postgres

  2. 在右上角的 More Options [⋮] 菜单中,选择 Download Certificate

  3. 在确认对话框中,选择 Download

为 SSL 证书验证配置 Postgres 客户端

  1. 放置根 CA 证书文本,包括“-----BEGINCERTIFICATE -----”和“-----END CERTIFICATE-----”行,位于客户端主机上安全位置的文件中。如果您已经有了包含要重用内容的根 CA 存储文件,您可以向其追加 Snowflake Postgres 根 CA 证书文本。

  2. 在连接配置中:

    1. 使用连接参数中的 sslrootcert=/path/to/root/certfile 指定根 CA 公共证书位置。

    2. 在连接参数中指定 sslmode=verify-casslmode=verify-full``(而不是 ``sslmode=require)。

备注

sslrootcert 具备 $HOME/.postgresql/root.crt 的默认值,用于建立连接的客户端系统用户。如果将根目录 CA 证书置于该位置,则无需指定连接的 sslrootcert 参数。

以下是这两个 sslmode 值的原理:

  • verify-ca:通过检查服务器是否由使用当前根 CA 公共证书的根 CA 证书对签名来验证服务器是否值得信任。

  • verify-full: Performs the verify-ca verification and additionally verifies that the server host name matches a name stored in the server certificate. Snowflake ensures that this will work for all signed server certificates signed with your account's root CA.

如果无法按照指定 sslmode 参数验证服务器证书,则 SSL 连接将失败。在大多数安全性要求较高的环境中,Snowflake 建议使用 verify-full

警告

如果有根 CA 证书存在,则 sslmode=require 会执行与 sslmode=verify-ca 相同的验证。对于具有由不同 CA 签名的证书的服务器来说,$HOME/.postgresql/root.crt 中存在根 CA 证书是一个常见的 SSL 连接错误来源。如果发生这种情况,您只需追加 Snowflake 根 CA 证书的文本到该文件,或将文件放置在由连接的 sslrootcert 参数指定的其他位置即可。

备注

有关这些不同的 sslmode 设置级别如何防止 MITM 攻击的完整说明,请参阅 不同 sslmode 设置提供的保护 (https://www.postgresql.org/docs/current/libpq-ssl.html#LIBPQ-SSL-PROTECTION) 的章节 PostgreSQL。