Azure WebApp发送邮件使用TLS1.0,如何强制启用TLS1.2?
解决Azure WebApp中PowerShell发送邮件强制使用TLS 1.2的方案
问题核心原因
Azure WebApp的TLS配置仅作用于站点的HTTP/HTTPS请求,不会自动继承到应用触发的PowerShell沙箱会话中,因此你在页面配置的最低TLS1.2限制对PowerShell执行的Send-MailMessage命令不生效,而本地PowerShell继承了操作系统的强加密配置所以默认走TLS1.2。
操作步骤
- 第一步:在你触发的.ps1脚本开头,显式指定当前会话的TLS协议版本,添加如下代码:
# 强制启用TLS 1.2和TLS 1.3,禁用低版本协议 [Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12 -bor [Net.SecurityProtocolType]::Tls13
该配置优先级高于系统默认配置,仅对当前PowerShell会话生效,不会影响站点其他业务。
- 第二步:检查Send-MailMessage命令的参数,必须添加
-UseSsl参数,否则即使指定了TLS版本也会触发明文传输降级,完整参考示例如下:
# 发送邮件完整示例 Send-MailMessage -From "发件人邮箱" ` -To "收件人邮箱" ` -Subject "邮件主题" ` -Body "邮件正文" ` -SmtpServer "你的SMTP服务器地址" ` -Port 587 ` -UseSsl ` -Credential $smtpCredential
- 第三步:补充.NET应用配置,在你的.NET应用Web.config文件的
<configuration>节点下添加如下配置,确保.NET层的所有网络请求默认使用强加密协议:
<runtime> <AppContextSwitchOverrides value="Switch.System.Net.DontEnableSchUseStrongCrypto=false" /> </runtime>
- 第四步:调整WebApp基础配置,将「仅HTTPS」开关调整为开启状态,避免低版本HTTP请求导致的协议降级风险,原有的.NET 4.8、32位运行平台、最低TLS1.2配置保持不变即可。
验证方式
在.ps1脚本中添加日志输出代码,触发脚本后在WebApp的Kudu日志控制台查看输出,确认返回值包含Tls12即代表配置生效:
Write-Output "当前生效的安全协议: $([Net.ServicePointManager]::SecurityProtocol)"
内容的提问来源于stack exchange,提问作者avinash
相关产品推荐
相关产品推荐

