ASP.NET调用Gmail SMTP发邮件出现AuthenticationException异常如何解决
AuthenticationException: The remote certificate is invalid according to the validation procedure
SSL证书验证流程简要说明
该报错本质是SMTP over SSL连接建立时,客户端(站点服务器)对Gmail SMTP服务器下发的SSL证书校验未通过,标准校验流程如下:
- TLS握手阶段,Gmail SMTP服务器会向站点服务器下发完整的证书链(末端站点证书+中间CA证书+根CA证书)
- 首先校验证书有效期:确认当前系统时间落在证书的有效时间范围内,未过期也未提前生效
- 其次校验域名匹配:确认证书上绑定的域名包含当前访问的
smtp.gmail.com - 然后校验信任链:逐层向上验证证书的签发机构,直到根证书,确认根证书存在于服务器系统的「受信任的根证书颁发机构」存储中,且证书未被篡改
- 最后校验证书状态:确认证书未被签发机构吊销
问题解决方向
MVC3站点属于.NET Framework技术栈,运行在Windows服务器上,可按优先级逐一排查:
- 校准服务器系统时间
老旧服务器经常出现时间漂移、时区配置错误的问题,时间偏差超过证书校验允许范围就会直接触发验证失败,先确认服务器的系统时间、时区和当前标准时间一致。 - 更新服务器根证书列表
MVC3是多年前的技术,对应的服务器系统大概率是Windows Server 2008/2012这类停止支持的版本,系统内置的根证书列表长期未更新,Gmail近年已切换为自家Google Trust Services签发的证书,老系统没有内置该根证书就会校验失败。
操作方式:运行certlm.msc打开本地计算机证书管理器,查看「受信任的根证书颁发机构」节点,确认是否存在Google Trust Services相关根证书,缺失的话可以手动导入证书,或者安装Windows Update中对应的根证书更新补丁。 - 排查内网中间人劫持
如果站点服务器在内网环境,需要确认是否存在防火墙、SSL代理、上网审计设备,这类设备经常会替换HTTPS/SSL请求的证书为私有签发证书,服务器不信任该私有证书就会报错。可以将代理设备的根证书导入服务器信任存储,或者配置SMTP请求绕过内网代理直接连接公网Gmail SMTP服务器。 - 代码层面兼容(应急方案,不推荐长期使用)
如果需要快速恢复业务,可以在邮件发送逻辑前添加临时证书验证回调,仅对smtp.gmail.com跳过证书校验:
注意该方案会降低安全性,问题定位后建议尽快移除。ServicePointManager.ServerCertificateValidationCallback = (sender, certificate, chain, sslPolicyErrors) => { if (certificate.Subject.Contains("smtp.gmail.com")) return true; return sslPolicyErrors == SslPolicyErrors.None; };
内容的提问来源于stack exchange,提问作者jorx
相关产品推荐
相关产品推荐

