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 打招呼。
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 伺服器頒發客戶端證書。
首先,刪除該指令,然後重試。您可能還有其他問題,但這是導致直接問題的原因。