Heroku-22栈运行.NET 5提示无可用libssl版本如何解决
问题根因
Heroku-22栈默认预装OpenSSL 3.0版本,.NET 5已于2022年5月终止官方支持,最高仅兼容OpenSSL 1.1.x系列,无法识别加载高版本OpenSSL,因此触发no usable version of libssl was found报错。
解决方案
临时兼容方案(暂无法升级.NET版本时使用)
通过APT构建包手动安装兼容版本的libssl1.1即可修复:
- 给应用添加Heroku APT构建包,在本地项目根目录执行命令:
heroku buildpacks:add --index 1 heroku-community/apt - 在项目根目录新建名为
Aptfile的纯文本文件,写入以下依赖声明:
libssl1.1
- 把
Aptfile提交到代码仓库后重新触发部署,构建阶段会自动下载安装匹配Heroku-22环境的libssl1.1版本。 - 如果部署后启动仍报相同错误,在Heroku应用配置变量中新增
LD_LIBRARY_PATH,值设为/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH即可。
长期推荐方案
.NET 5已停止官方维护,后续Heroku栈迭代还可能出现其他兼容问题,建议将项目升级至*.NET 6 或更高的.NET LTS(长期支持)版本*,上述高版本已原生适配OpenSSL 3.0,无需额外手动安装依赖,运行稳定性和安全性都有保障。
注意:不建议使用非官方补丁修改.NET 5运行时来兼容OpenSSL 3.0,这类修改未经过官方验证,容易引发数据加密异常、内存泄漏等未知问题。
内容的提问来源于stack exchange,提问作者planyway
相关产品推荐
相关产品推荐

