macOS Ventura下.NET 6启用TLS 1.3失败求助
我有一段.NET 6的配置代码,在Windows 11上能正常启用TLS 1.3,但放到macOS Ventura中就失效了。配置代码如下:
builder.WebHost.UseKestrel(k => { k.ConfigureHttpsDefaults(options => { options.SslProtocols = SslProtocols.Tls13; }); });
在Mac上访问时,Chrome提示err_ssl_version_or_cipher_mismatch,Postman则报错:Error: write EPROTO 140186045514584:error:1000042e:SSL routines:OPENSSL_internal:TLSV1_ALERT_PROTOCOL_VERSION:../../../../src/third_party/boringssl/src/ssl/tls_record.cc:594:SSL alert number 70
我试过执行命令sudo defaults write /Library/Preferences/com.apple.networkd tcp_connect_enable_tls13 1修改Mac的系统配置,但没有效果。有人遇到过类似问题吗?
可行的排查与解决方法
检查OpenSSL版本:.NET 6在macOS上依赖系统OpenSSL,TLS 1.3要求OpenSSL 1.1.1及以上版本。执行
openssl version查看当前版本,若低于要求,用Homebrew升级:brew install openssl,之后设置环境变量让.NET找到新版本:export DYLD_LIBRARY_PATH=/usr/local/opt/openssl/lib(终端临时生效,如需永久生效可添加到~/.zshrc或~/.bash_profile)。调整TLS协议范围:不要仅强制TLS 1.3,尝试同时启用TLS 1.2和TLS 1.3,验证是否是纯TLS 1.3协商失败:
builder.WebHost.UseKestrel(k => { k.ConfigureHttpsDefaults(options => { options.SslProtocols = SslProtocols.Tls12 | SslProtocols.Tls13; }); });验证证书兼容性:确认使用的SSL证书支持TLS 1.3的密码套件(如TLS_AES_256_GCM_SHA384、TLS_CHACHA20_POLY1305_SHA256)。执行
openssl x509 -in 你的证书文件.pem -text -noout查看证书扩展信息,检查是否包含相关密码套件支持。确保系统配置生效:修改networkd配置后,重启Mac或执行
sudo killall -HUP mDNSResponder重置网络服务,让配置生效。另外,也可以尝试重置系统SSL缓存:sudo security flush-keychain -v。
内容的提问来源于stack exchange,提问作者semper fi

