如何在 PostgreSQL 中为 SSL 连接配置 TLSv1.1 协议?

Mic*_*ael 10 postgresql ssl postgresql-9.4

我需要为 PostgreSQL 中的 SSL 连接配置 TLS 1.1 协议。

我无法在PostgreSQL 配置中看到协议设置

需要禁用 SSL 协议和 TLSv1 并仅启用 TLSv1.1(或 TLSv1.2)

添加

PCI DSS v3.1 要求回退到 SSL 和 TLSv1 将被禁用。

是否可以将 PostgreSQL 配置为仅使用 TLSv1.1 进行协商?

如果您知道这是不可能的,请分享此信息

已添加 2

不幸的是,配置ssl_ciphers是不够的,因为您可以对不同的协议使用相同的密码。需要SSL_METHOD按照此处所述进行配置:https : //www.openssl.org/docs/manmaster/ssl/ssl.html

我的结论是 PostgreSQL 配置中遗漏了SSL_METHOD(or SSL_PROTOCOL) 的配置,并且不能抱怨 PCI DSS 3.1。

如果我错了,请纠正我。

Kas*_*dry 14

@BrianEfting 是正确的,您可以指定适当的密码套件以仅允许符合您的 PCI-DSS 3.1 规范需求的 TLSv1.2。

ssl_ciphers在您的选项中使用这样的密码列表postgresql.conf

ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DHE-DSS-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!3DES:!MD5:!PSK

与 setting 一起ssl_prefer_server_ciphers=true,应该足以仅允许 TLSv1.2 连接。

您可以使用了解 PostgreSQL 协议的SSLyze来验证这一点。

为了测试,我使用了以下命令:

./sslyze.py --sslv2 --sslv3 --tlsv1 --tlsv1_1 --tlsv1_2 localhost:5432 --starttls=postgres --hide_rejected_ciphers

在 Debian Wheezy 上的 PostgreSQL 9.4 下给出了以下输出,表明除指定的 TLSv1.2 密码外的所有密码套件都被拒绝,这应该通过使用 TLSv1.1 或更高版本满足 PCI-DSS 3.1 的要求。

postgres@pgsqlsec4:~/sslyze$ ./sslyze.py --sslv2 --sslv3 --tlsv1 --tlsv1_1 --tlsv1_2 localhost:5432 --starttls=postgres --hide_rejected_ciphers



 AVAILABLE PLUGINS
 -----------------

  PluginCompression
  PluginHeartbleed
  PluginChromeSha1Deprecation
  PluginSessionRenegotiation
  PluginOpenSSLCipherSuites
  PluginSessionResumption
  PluginHSTS
  PluginCertInfo



 CHECKING HOST(S) AVAILABILITY
 -----------------------------

   localhost:5432                      => ::1:5432



 SCAN RESULTS FOR LOCALHOST:5432 - ::1:5432
 ------------------------------------------

  * SSLV2 Cipher Suites:
      Server rejected all cipher suites.

  * TLSV1_2 Cipher Suites:
      Preferred:                       
                 ECDHE-RSA-AES128-GCM-SHA256   ECDH-256 bits  128 bits                                         
      Accepted:                        
                 ECDHE-RSA-AES256-SHA384       ECDH-256 bits  256 bits                                         
                 ECDHE-RSA-AES256-GCM-SHA384   ECDH-256 bits  256 bits                                         
                 DHE-RSA-AES256-SHA256         DH-1024 bits   256 bits                                         
                 DHE-RSA-AES256-GCM-SHA384     DH-1024 bits   256 bits                                         
                 ECDHE-RSA-AES128-SHA256       ECDH-256 bits  128 bits                                         
                 ECDHE-RSA-AES128-GCM-SHA256   ECDH-256 bits  128 bits                                         
                 DHE-RSA-AES128-SHA256         DH-1024 bits   128 bits                                         
                 DHE-RSA-AES128-GCM-SHA256     DH-1024 bits   128 bits                                         

  * TLSV1_1 Cipher Suites:
      Server rejected all cipher suites.

  * TLSV1 Cipher Suites:
      Server rejected all cipher suites.

  * SSLV3 Cipher Suites:
      Server rejected all cipher suites.



 SCAN COMPLETED IN 0.73 S
 ------------------------
postgres@pgsqlsec4:~/sslyze$
Run Code Online (Sandbox Code Playgroud)


R0B*_*0BA 6

同时,从 Postgres 12 开始,可以通过调整 ssl_min_protocol_version` 参数在服务器端强制使用最低 SSL/TLS 加密级别。

根据此文档页面, 当前有效值为:TLSv1、TLSv1.1、TLSv1.2、TLSv1.3。

从 Postgres 13 开始,默认值为 TLSv1.2(之前是 TLSv1)。


小智 5

从以下链接:

18.3. 连接和身份验证(PostgreSQL 9.4 手册)

您似乎可以使用该ssl_ciphers选项来指定您接受的密码列表。它提到它遵循您的 OpenSSL 版本支持的任何内容。

在这个链接中:

OpenSSL 密码(OpenSSL.org)

提到 TLSv1.1 没有特定的密码套件,但您可以指定 TLSv1.2。