Ssl

SSL 證書在 SNI 伺服器上無效 - Dovecot/Postfix

  • October 30, 2022

我在執行 Raspbian 10 (Buster) 的 Raspberry Pi 上執行了 Dovecot/Postfix 伺服器 我在同一台伺服器上執行了兩個域名,出於隱私考慮,我將其稱為 DOMAIN 1 和 DOMAIN 2。兩者都有關聯的電子郵件地址與他們一起,兩個域都可以正常發送和接收電子郵件。

但是,每當我嘗試使用 Outlook 檢查電子郵件時,都會收到 DOMAIN 2 的警告“您連接的伺服器正在使用無法驗證的安全證書。目標主體名稱不正確。” 但不適用於 DOMAIN 1。

當我“查看證書”時,證書聲稱它是頒發給 DOMAIN 1 的。

我在 Dovecot 和 Postfix 中使用 SNI 設置域,並將 DOMAIN 1 作為預設值,如下所示:

/etc/postfix/vmail_ssl.map
mail.DOMAIN1.com /etc/letsencrypt/live/DOMAIN1.com/privkey.pem /etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
mail.DOMAIN2.com /etc/letsencrypt/live/DOMAIN2.com/privkey.pem /etc/letsencrypt/live/DOMAIN2.com/fullchain.pem

/etc/dovecot/ssl-sni.conf
local_name mail.DOMAIN1.com {
ssl_cert = </etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN1.com/privkey.pem
}
local_name mail.DOMAIN2.com {
ssl_cert = </etc/letsencrypt/live/DOMAIN2.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN2.com/privkey.pem
}

並在 Dovecot 的 SSL Conf 中如下所示

/etc/dovecot/conf.d/10-ssl.conf
# SSL/TLS support: yes, no, required. <doc/wiki/SSL.txt>
ssl = yes

# PEM encoded X.509 SSL/TLS certificate and private key. They're opened before
# dropping root privileges, so keep the key file unreadable by anyone but
# root. Included doc/mkcert.sh can be used to easily generate self-signed
# certificate, just make sure to update the domains in dovecot-openssl.cnf
#ssl_cert = </etc/dovecot/private/dovecot.pem
#ssl_key = </etc/dovecot/private/dovecot.key
# default
ssl_cert = </etc/letsencrypt/live/DOMAIN1.com/fullchain.pem
ssl_key = </etc/letsencrypt/live/DOMAIN1.com/privkey.pem

# DOMAIN2.com
local_name mail.DOMAIN2.com {
       ssl_cert = </etc/letsencrypt/live/DOMAIN2.com/fullchain.pem
       ssl_key = </etc/letsencrypt/live/DOMAIN2.com/privkey.pem
}

我在設置這些東西方面沒有大量經驗,但在我看來,Dovecot 在所有情況下都將 DOMAIN1 的 SSL 證書作為預設值,而不是在建立連接以檢查郵件時為 DOMAIN2 提供證書域…雖然我可能完全錯了…任何人都可以建議我做錯了什麼以及我需要做些什麼才能使 SNI 正常工作?我已經盡力了,但我的最好似乎還不夠好……

謝謝!

SNI 對於郵件仍然不常見。雖然像 dovecot 這樣的一些郵件伺服器支持它,但許多郵件客戶端不支持。但是客戶端沒有使用 SNI 會導致伺服器發送一些預設證書。因此,它適用於一個域(預設),但不適用於另一個域。

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