Postfix

OpenSSL 未提供客戶端證書(SMTP、Postfix)

  • July 16, 2016

我使用 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 打招呼。

EHLO mail.example.com

此命令生成“未提供客戶端證書”。

在此處輸入圖像描述

這很奇怪,因為我可以在前面的輸出中從字面上看到公共證書。我有一種感覺,我在這裡遺漏了一些概念性的東西。例如,我是否需要告訴客戶端發送或使用公共證書?Postfix 伺服器上的公共證書與客戶端證書不同嗎?

**目標:**我的總體目標是將 Postfix 配置為加密電子郵件,而不是發送未加密的電子郵件。

這是postconf -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

您已smtpd_tls_req_ccert在 Postfix 配置中進行設置。

該指令要求所有客戶端都具有您頒發給該特定客戶端的*客戶端證書。*然後,僅允許來自預先批准的主機的傳入 SMTP 連接到您的伺服器。

這顯然不是你想要的。您正在嘗試從整個 Internet 接收郵件,並且您不可能向世界上的每個 SMTP 伺服器頒發客戶端證書。

首先,刪除該指令,然後重試。您可能還有其他問題,但這是導致直接問題的原因。

引用自:https://serverfault.com/questions/790121