OpenSSL 未提供客户端证书(SMTP、Postfix)

OpenSSL 未提供客户端证书(SMTP、Postfix)

我使用 OpenSSL 创建私钥和自签名公共证书。然后我创建了一个包含私钥和公共证书的证书颁发机构文件 (mail.example.com.pem)。在 LAN 中的客户端计算机上,我使用 OpenSSL 连接到端口 587 (SMTP) 上的 Postfix,并告诉 OpenSSL 使用证书颁发机构文件 (mail.example.com.pem)。

openssl s_client -connect mail.example.com:587 -starttls smtp -CAfile /etc/pki/tls/private/mail.example.com.pem

这会产生相当多的输出。输出中包含来自证书颁发机构文件的公共证书。

在此处输入图片描述

在输入完所有 TLS、证书和其他安全信息后,我看到一个闪烁的光标,因此我尝试向 Postfix 说 Hello。

EHLO mail.example.com

此命令产生“未提供客户端证书”的结果。

在此处输入图片描述

这很奇怪,因为我可以在前面的输出中看到公共证书。我觉得我在这里缺少了一些概念性的东西。例如,我需要告诉客户端发送或使用公共证书吗?Postfix 服务器上的公共证书与客户端证书不同吗?

目标:我的总体目标是配置 Postfix 来加密电子邮件,而不是发送未加密的电子邮件。

以下是后配置-n命令:

data_directory = /var/lib/postfix
home_mailbox = Maildir/
inet_interfaces = all
inet_protocols = all
mail_owner = postfix
mailbox_command =
mydestination = example.com, localhost.example.com, localhost
mynetworks_style = host
queue_directory = /var/spool/postfix
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
smtpd_sasl_auth_enable = no
smtpd_sasl_path = private/auth
smtpd_tls_CAfile = /etc/pki/tls/mail.example.com.pem
smtpd_tls_auth_only = yes
smtpd_tls_cert_file = /etc/pki/tls/mail.example.com.crt
smtpd_tls_key_file = /etc/pki/tls/mail.example.com.key
smtpd_tls_loglevel = 3
smtpd_tls_req_ccert = yes
smtpd_tls_security_level = encrypt
smtpd_tls_session_cache_database = btree:/var/lib/postfix/smtpd_tls_cache
smtpd_tls_session_cache_timeout = 3600s
tls_random_exchange_name = /var/lib/postfix/prng_exch
tls_random_source = dev:/dev/urandom

答案1

您已设定smtpd_tls_req_ccert在您的 Postfix 配置中。

该指令要求所有客户都拥有客户您向该特定客户端颁发的证书。这样,只有预先批准的主机才允许连接到您的服务器的 SMTP 传入连接。

这显然不是您想要的。您正在尝试从整个 Internet 接收邮件,并且不可能向世界上每个 SMTP 服务器颁发客户端证书。

首先,删除该指令,然后重试。您可能遇到其他问题,但这是导致直接问题的原因。

相关内容