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

Postfix客户端无法连接:OpenSSL版本错误问题求助

问题诊断与修复方案

核心错误分析

openssl输出的wrong version number和no peer certificate available表明:Postfix在TLS握手时未能正确返回证书链,导致PHP等客户端无法完成STARTTLS握手。终端本地能正常发送是因为mynetworks = 127.0.0.0/8,Postfix对本地信任网络的连接会跳过严格的TLS校验。

修复步骤

1. 修正证书链与权限

  • 调整fullchain.pem顺序:正确的证书链顺序应为「域名证书 → 中间CA证书 → 根CA证书」,移除CloudFlare源证书(该证书仅适用于Web服务,与邮件TLS无关)。
  • 设置证书权限:确保Postfix进程能读取证书文件:
    chown root:postfix /etc/nginx/certs/mail.domain/*
    chmod 640 /etc/nginx/certs/mail.domain/*
    

2. 优化Postfix TLS配置

在现有配置基础上补充/修改以下参数:

# 启用TLS会话缓存,提升握手效率
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache

# 明确指定高安全级别的TLS加密套件
smtpd_tls_ciphers = high
smtpd_tls_mandatory_ciphers = high
smtpd_tls_mandatory_protocols = !SSLv2, !SSLv3, TLSv1.2, TLSv1.3

# 开启TLS日志,方便后续排查
smtpd_tls_loglevel = 1

3. 验证配置与服务重启

  • 检查Postfix配置语法正确性:
    postfix check
    
  • 重启Postfix服务使配置生效:
    systemctl restart postfix
    

4. 重新测试TLS连接

使用标准命令测试STARTTLS握手流程:

openssl s_client -connect mail.domain:587 -starttls smtp

若修复成功,输出内容会显示完整的证书链及握手成功标识。

5. PHP客户端适配

确保PHP邮件配置与Postfix的TLS规则匹配,示例配置:

$mail->SMTPSecure = 'tls';
$mail->Port = 587;
$mail->SMTPAutoTLS = true;
$mail->SMTPOptions = array(
    'ssl' => array(
        'verify_peer' => true,
        'verify_depth' => 3,
        'allow_self_signed' => false,
        'cafile' => '/etc/ssl/certs/ca-certificates.crt'
    )
);

关键日志排查

若问题仍存在,通过Postfix日志定位具体错误:

grep -i tls /var/log/postfix.log

内容的提问来源于stack exchange,提问作者thetreedev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 23:04:58