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

Nginx已启用TLS1.2/1.3但MailKit仍用TLS1.0连接报SSL握手错误

MailKit SSL握手异常排查与解决方案

核心前提说明

Nginx Web服务的SSL协议配置与SMTP邮件服务的SSL配置为两套独立规则,Web服务的TLS 1.2/1.3生效不代表SMTP服务也启用了对应版本协议。
你提到的SMTP客户端日志显示握手降级为TLS 1.0的截图如下:
日志截图

排查步骤

1. 确认SMTP服务侧的TLS配置

  • 若SMTP服务为独立部署(如Postfix、Exchange等),直接检查该服务的TLS最低版本配置,确认是否开放了TLS 1.2/1.3支持,是否限制了仅允许TLS 1.0。
  • 若使用Nginx作为SMTP服务的反向代理,检查Nginx mail模块配置中的ssl_protocols参数,确认是否单独为SMTP代理配置了TLS 1.2、TLS 1.3支持。
  • 可通过openssl命令直接验证SMTP服务的各TLS版本支持情况:
    # 测试TLS 1.2支持情况
    openssl s_client -connect <SMTP域名>:<端口> -starttls smtp -tls1_2
    # 测试TLS 1.3支持情况
    openssl s_client -connect <SMTP域名>:<端口> -starttls smtp -tls1_3
    # 测试TLS 1.0支持情况
    openssl s_client -connect <SMTP域名>:<端口> -starttls smtp -tls1
    
    对应命令返回握手成功即代表该版本TLS协议已启用。

2. 检查MailKit客户端配置

  • 显式指定MailKit的最低支持TLS版本,避免默认配置自动降级,示例代码如下:
    using (var client = new SmtpClient())
    {
        // 仅允许TLS 1.2及以上版本,禁用低版本TLS
        client.SslProtocols = System.Security.Authentication.SslProtocols.Tls12 | System.Security.Authentication.SslProtocols.Tls13;
        // 剩余连接、发送邮件逻辑
        client.Connect("smtp.example.com", 587, SecureSocketOptions.StartTls);
        // ...
    }
    
  • 若使用的是.NET Framework 4.7以下版本,需在程序入口处额外添加全局TLS配置:
    System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13;
    

3. 排查中间链路TLS降级

检查客户端与SMTP服务之间的防火墙、WAF、流量代理等中间设备,确认是否存在强制将TLS握手降级为1.0的规则。

验证方式

完成配置调整后重新发起邮件发送请求,查看SMTP握手日志,确认TLS版本为1.2或1.3,且不再抛出MailKit.Security.SslHandshakeException异常即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 12:18:02