You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Postfix配置:为每个托管的虚拟邮件域配置不同的TLS证书

Postfix配置:为每个托管的虚拟邮件域配置不同的TLS证书

当然可以!Postfix从2.11版本开始就支持SMTP服务器端的SNI(Server Name Indication),刚好能实现你想要的、类似Apache虚拟主机的TLS证书按需切换功能。下面结合你的现有环境,一步步教你配置:

前提条件确认

首先得确保你的Postfix版本≥2.11,只有这个版本及以上才支持SMTP服务器端的SNI。执行以下命令查看版本:

postconf -d | grep mail_version

1. 整理证书文件

先把每个域名的证书和私钥准备妥当:

  • 每个域名需要完整的证书链文件(包含服务器证书+所有中间证书,顺序是服务器证书在前,中间证书在后),以及对应的无密码保护的私钥文件(如果私钥有密码,Postfix启动时会卡住,无法自动运行)。
  • 把证书文件统一放在Postfix能访问的目录,比如/etc/postfix/certs/,并设置正确的权限,让Postfix用户(通常是postfix)能读取:
chmod 640 /etc/postfix/certs/*.pem
chown root:postfix /etc/postfix/certs/*.pem

对应你的域名:

  • mail.my-1st-domain.tld:证书链my-cert-chain-for-1st-domain.pem、私钥my-key-for-1st-domain.pem
  • mail.my-2nd-domain.tld:证书链my-cert-chain-for-2nd-domain.pem、私钥my-key-for-2nd-domain.pem

2. 创建SNI映射表

创建一个映射文件,用来把客户端请求的域名和对应的证书/私钥关联起来。比如创建/etc/postfix/sni_map,内容如下:

mail.my-1st-domain.tld    /etc/postfix/certs/my-cert-chain-for-1st-domain.pem /etc/postfix/certs/my-key-for-1st-domain.pem
mail.my-2nd-domain.tld    /etc/postfix/certs/my-cert-chain-for-2nd-domain.pem /etc/postfix/certs/my-key-for-2nd-domain.pem

然后生成Postfix能识别的哈希表:

postmap /etc/postfix/sni_map

3. 修改Postfix主配置(main.cf)

编辑/etc/postfix/main.cf,添加或调整以下配置:

  • 设置默认TLS证书(给不支持SNI的老客户端使用,如果你没有单独的默认证书,也可以用其中一个域名的证书代替):
smtpd_tls_cert_file = /etc/postfix/certs/default-cert.pem
smtpd_tls_key_file = /etc/postfix/certs/default-key.pem
  • 启用SNI映射:
smtpd_tls_server_sni_maps = hash:/etc/postfix/sni_map
  • 确保TLS功能已经开启(如果之前没配置过):
smtpd_use_tls = yes
smtpd_tls_security_level = may

4. 重启Postfix生效

根据你的操作系统,执行对应的重启命令:

# 适用于systemd系统(如Ubuntu 16.04+、CentOS 7+)
systemctl restart postfix

# 适用于sysvinit系统
service postfix restart

验证配置是否成功

用openssl命令分别测试两个域名的证书加载情况:
测试第一个域名:

openssl s_client -connect 203.0.113.1:25 -servername mail.my-1st-domain.tld -starttls smtp

在输出中查找Subject:字段,确认证书属于mail.my-1st-domain.tld。

测试第二个域名:

openssl s_client -connect 203.0.113.1:25 -servername mail.my-2nd-domain.tld -starttls smtp

同样确认证书对应正确的域名。

注意事项

  • 证书必须包含对应的域名(比如mail.my-1st-domain.tld)作为Subject Alternative Name (SAN) 或者Common Name (CN),否则客户端会提示证书不匹配。
  • 映射表中的域名要和客户端发起SNI请求的域名完全一致(大小写敏感,建议统一用小写)。
  • 如果你的Postfix版本低于2.11,需要先升级到支持SNI的版本,否则无法实现这个功能。

备注:内容来源于stack exchange,提问作者user2690527

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.21 10:18:13