Postfix

使用 Dovecot 和 Postfix 在電子郵件上設置 SSL

  • July 6, 2018

在我的伺服器上,我在 Ubuntu 上安裝了 Postfix、Dovecot 和 Apache2。

我購買了 SSL 證書並用它來保護網站。這工作正常。

現在我想用相同的證書配置 Postfix 和 Dovecot,這樣我也可以使用我的郵件伺服器和 SSL。但是當我在手機上的 gmail 應用程序上設置它時,我得到了這個:

Certificate not trusted
Subject: kanzan.se
Issuer: AlphaSSL CA - SHA256 - G2
Valid from: Jul 3, 2018
Expires on: Jul 4, 2019
Current date: Jul 6, 2018
PEM encoded chain: -----BEGIN CERTIFICATE-----
MIIFzTCCBLWgAwIBAgIMdmzZXlCIkPQV/MbvMA0GCSqGSIb3DQEBCwUAMEwxCzAJBgN...

這是我的配置:

/etc/postfix/main.cf:

smtpd_tls_cert_file=/etc/ssl/certs/kanzan_cert_comb.crt
smtpd_tls_key_file=/etc/ssl/private/kanzan_ssl.key
smtpd_use_tls=yes
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

smtp_sasl_security_options =
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_auth_enable = yes
broken_sasl_auth_clients = yes
smtpd_sasl_security_options = noanonymous
smtpd_sender_login_maps = hash:/etc/postfix/controlled_envelope_senders
smtpd_recipient_restrictions = permit_sasl_authenticated
#reject_sender_login_mismatch

/etc/dovecot/conf.d/10-ssl.conf:

ssl = yes
ssl_cert = </etc/ssl/certs/kanzan_cert_comb.crt
ssl_key = </etc/ssl/private/kanzan_ssl.key

/etc/postfix/master.cf:

submission inet n       -       y       -       -       smtpd
 -o syslog_name=postfix/submission
 -o smtpd_tls_security_level=may
 -o smtpd_sasl_auth_enable=yes

smtps     inet  n       -       y       -       -       smtpd
 -o syslog_name=postfix/smtps
 -o smtpd_tls_wrappermode=yes
 -o smtpd_sasl_auth_enable=yes

首先,我可以為郵件和網站使用相同的證書嗎?(同一個域)。我在我的 DNS 中添加了一條 MX 記錄,它指向這個域 kanzan.se。

我的配置對嗎?

這是與證書一起發送的證書鏈的問題。您可以對 Apache2、Postfix 和 Dovecot 使用相同的證書。但是,中間證書的配置是不同的:Apache 有一個單獨的SSLCertificateChainFile指令,而 Postfix 和 Dovecot 要求中間證書在同一個文件(smtpd_tls_cert_file/ ssl_cert)中。

openssl s_client -debug -connect使用SMTPSkanzan.se:465和HTTPS測試您的目前配置kanzan.se:443僅顯示一個證書。

Certificate chain
0 s:/OU=Domain Control Validated/CN=kanzan.se
  i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2

這也應該顯示中間證書,到根 CA 的完整鍊是:

Certificate chain
 0 s:/OU=Domain Control Validated/CN=kanzan.se
   i:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
 1 s:/C=BE/O=GlobalSign nv-sa/CN=AlphaSSL CA - SHA256 - G2
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
 2 s:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA
   i:/C=BE/O=GlobalSign nv-sa/OU=Root CA/CN=GlobalSign Root CA

要為 Postfix 和 Dovecot(和 Apache)進行設置:

  1. 您可以從 GlobalSign AlphaSSL Intermediate Certificates獲得中間證書。您需要帶有 serial 的那個040000000001444ef03631
/etc/ssl/certs# wget https://secure.globalsign.com/cacert/gsalphasha2g2r1.crt

GlobalSign 根 CA 應位於GlobalSign_Root_CA.pem. 您可以查看序列號:

/etc/ssl/certs$ openssl x509 -in GlobalSign_Root_CA.pem -serial -noout
serial=040000000001154B5AC394
  1. 所有證書都需要採用 ASCII 鎧裝 PEM 格式,而下載gsalphasha2g2r1.crt的目前是 DER 編碼的二進制格式。您需要使用以下方法進行轉換:
openssl x509 -inform DER -in gsalphasha2g2r1.crt -out gsalphasha2g2r1.pem
  1. 按照Postfix TLS 自述文件中的說明組合證書。Dovecot的順序相同。
cat kanzan_cert_comb.crt gsalphasha2g2r1.pem GlobalSign_Root_CA.pem > postfix.crt
  1. 使用這些證書:
  • 後綴:smtpd_tls_cert_file=/etc/ssl/certs/postfix.crt
  • 他教:ssl_cert = </etc/ssl/certs/postfix.crt
  • 阿帕奇,添加:SSLCertificateChainFile /etc/ssl/certs/gsalphasha2g2r1.crt

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