使用PowerShell的Send-MailMessage调用AWS SES发邮件遇证书验证错误求助
问题原因及排查方案:AWS SES + Send-MailMessage 证书验证错误
问题原因
出现The remote certificate is invalid according to the validation procedure错误,核心是PowerShell无法验证AWS SES SMTP服务器的SSL证书,常见触发场景包括:
- SMTP服务器地址错误:指定的
$smtp_server与AWS SES对应区域的官方SMTP端点不匹配,导致连接到的服务器证书域名不匹配。 - 根证书缺失:本地系统的受信任根证书库中缺少AWS SES证书的签发根证书(通常为Amazon Trust Services颁发),无法完成证书链验证。
- 网络SSL拦截:企业防火墙、代理服务器开启了SSL流量拦截,替换了AWS的原始证书,导致证书不受信任。
- 端口与SSL模式不匹配:AWS SES的25端口通常用于
STARTTLS模式,而非直接SSL连接,用-UseSsl强制SSL握手会引发证书验证问题。
下一步排查方案
1. 核对SMTP服务器地址
登录AWS SES控制台,确认当前区域的SMTP端点(例如美国东部1为email-smtp.us-east-1.amazonaws.com),确保$smtp_server变量完全匹配,无拼写错误。
2. 更换端口与SSL模式测试
AWS SES推荐的SSL/STARTTLS端口如下,修改命令重试:
- 使用465端口(直接SSL连接):
Send-MailMessage -From $from_address -to $to -subject 'test subject' -Body $body -SmtpServer $smtp_server -Credential $credential -UseSsl -Port 465 - 使用587端口(STARTTLS模式):
Send-MailMessage -From $from_address -to $to -subject 'test subject' -Body $body -SmtpServer $smtp_server -Credential $credential -StartTls -Port 587
3. 检查本地根证书
打开浏览器访问AWS SES SMTP端点的HTTPS地址(如https://email-smtp.us-east-1.amazonaws.com),查看证书详情:
- 确认证书的根颁发机构是否在本地系统的「受信任根证书颁发机构」列表中。
- 若缺失,手动下载并导入对应的Amazon Trust Services根证书。
4. 排查网络拦截
- 切换到无代理/无SSL拦截的网络环境(如手机热点)测试,若能正常发送,说明原网络存在拦截。
- 若必须使用当前网络,可联系管理员关闭SMTP流量的SSL拦截,或把拦截设备的证书导入本地信任库。
5. 临时跳过证书验证(仅测试用)
仅用于排查问题,绝对禁止在生产环境使用,通过自定义证书验证策略绕过检查:
add-type @" using System.Net; using System.Security.Cryptography.X509Certificates; public class TrustAllCertsPolicy : ICertificatePolicy { public bool CheckValidationResult( ServicePoint srvPoint, X509Certificate certificate, WebRequest request, int certificateProblem) { return true; } } "@ [System.Net.ServicePointManager]::CertificatePolicy = New-Object TrustAllCertsPolicy # 执行发送命令 Send-MailMessage -From $from_address -to $to -subject 'test subject' -Body $body -SmtpServer $smtp_server -Credential $credential -UseSsl -Port 25
内容的提问来源于stack exchange,提问作者Muhammad Zubair
相关产品推荐
相关产品推荐

