升级Ubuntu与Mono后如何解决TLSV1_ALERT_PROTOCOL_VERSION SSL错误?
解决Mono调用ASMX接口时的TLS协议版本错误
错误原因
该错误是TLS协议版本不兼容导致的:Mono默认可能使用了旧版TLS(如TLS 1.0/1.1)发起HTTPS请求,但Ubuntu 20.04搭配Let's Encrypt证书的Apache服务器通常已禁用这些不安全的旧协议,仅支持TLS 1.2及以上版本。
解决步骤
1. 全局配置Mono强制使用高版本TLS
编辑Mono的全局配置文件(如/etc/mono/config),在<configuration>节点内添加以下配置,强制Mono使用TLS 1.2/1.3:
<settings> <setting name="Mono.Security.Protocol.Tls.SslServiceProviderType" value="Btls" /> <setting name="Mono.Security.Protocol.Tls.DefaultProtocol" value="Tls12" /> <setting name="MonoBtls.TlsMinProtocol" value="Tls12" /> <setting name="MonoBtls.TlsMaxProtocol" value="Tls13" /> </settings>
保存后重启Apache服务:
sudo systemctl restart apache2
2. 在ASMX代码中显式指定TLS版本
如果全局配置不生效,可以在发起请求的C#代码中直接设置TLS版本,确保放在请求初始化之前:
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls13;
3. 验证Apache的SSL协议配置
检查Apache的SSL站点配置文件(如/etc/apache2/sites-available/[你的站点]-ssl.conf),确保仅启用安全的TLS版本:
SSLProtocol all -SSLv3 -TLSv1 -TLSv1.1 SSLCipherSuite HIGH:!aNULL:!MD5:!3DES
配置完成后重启Apache,并用以下命令测试TLS 1.2连接是否正常:
openssl s_client -connect [你的域名]:443 -tls1_2
4. 更新Mono组件到最新补丁
尽管你已升级到Mono 6.12.0.200,仍可执行以下命令安装最新安全补丁:
sudo apt update && sudo apt upgrade mono-complete
内容的提问来源于stack exchange,提问作者stighy
相关产品推荐
相关产品推荐

