为特定收件人禁用 Postfix/TLS 中的密码/密码套件

为特定收件人禁用 Postfix/TLS 中的密码/密码套件

我们使用 Postfix 2.9.4 和 OpenSSL 0.9.8j-fips 2009 年 1 月 7 日(SLES11 SP4)。

我们在向特定收件人发送邮件时收到此错误消息:

error:1408D13A:SSL routines:SSL3_GET_KEY_EXCHANGE:unable to find ecdh parameters:s3_clnt.c:1336

阅读我们 OpenSSL 版本的 s3_clnt.c 中的代码时,它在注释中说

目前我们只支持命名(非通用)曲线,在这种情况下 ECParameters 只有三个字节。

分析代码,这不是命名曲线类型,或者参数超出范围。

我的问题是:如何教会我们的 SMTP 客户端(或者接收服务器)省略这个密码/密码套件或参数集?

答案1

每个域的 TLS 策略

您可以使用Postfix TLS 策略图创建域名列表以及适用于它们的 TLS 策略。

您还可以更改后缀中的全局smtpsmtpd选项来限制可以或必须使用的密码。

在这种情况下,另一个选择是指定要使用的密码,如Postfix 中的 TLS 前向保密 也许只是使用强的。

    smtpd_tls_eecdh_grade = strong | ultra

以下是一个例子/etc/postfix/tls_policy

.google.com     secure match=.google.com:.gmail.com protocols=TLSv1 ciphers=high
.paypal.com     secure match=.paypal.com protocols=TLSv1 ciphers=high
.example.tld    ciphers=medium
.blizzard.com   may

然后使用以下代码创建地图:

postmap tls_policy

/etc/postfix/main.cf需要:

smtp_tls_policy_maps = hash:/etc/postfix/tls_policy

您可以尝试使用and和/或 set/etc/postfix/main.cf排除密码smtpd_tls_exclude_cipherssmtpd_tls_mandatory_exclude_cipherssmtpd_tls_eecdh_grade = strong

如果调整密码排除或设置 tls_policy 没有帮助,那么您可能需要考虑更新 openssl 和 postfix。

答案2

仅为一个收件人定义特定密码列表的解决方案:

master.cf:smtp2 unix - - n - - smtp -o tls_high_cipherlist=!ECDH:...(some more)

transport_map:(<domain> smtp2:<domain>第二个域可省略?)

tls_策略图:<domain> verify match=hostname ciphers=high

这省略了有问题的 ECDH 算法并在这种情况下发挥作用。

答案3

您可以使用后缀传输图通过 中定义的另一项服务将邮件路由到特定目的地master.cf。在那里,您应该能够使用 TLS 的常用 postfix 配置选项来启用/禁用密码。

答案4

解决这个问题的一个更简单的方法(而不是为 smtp 引入新的 master.cf 条目)是使用 tls_policy 映射并设置

tls_policy:  <domain>    verify hostname=<hostname> exclude=kECDH

就是这样。

如果你没有 tls_policy(在旧版本的 postfix 中),你可以使用参数

-o smtp_tls_mandatory_exclude_ciphers=kECDH

在此域的 master.cf 条目中。

感谢所有帮助我找到这个问题的贡献者 ;-)

相关内容