.NET Core Docker容器API报错:提供的密码无法读取证书数据
解决方案
1 修复路径大小写匹配问题
Linux容器文件系统大小写敏感,首先确认机密配置中的证书路径和容器内实际文件名完全一致:
如果容器内证书文件名为DocumentUploader.pfx,机密配置的Path字段必须和拼写完全匹配,不能写为documentuploader.pfx。
2 新增证书加载存储标记
Windows系统导出的PFX证书在Linux环境加载时,默认密钥存储规则不兼容,需要添加KeyStorageFlags配置,修改API项目的机密配置如下:
"Kestrel": { "Certificates": { "Default": { "Path": "/root/.aspnet/https/DocumentUploader.pfx", "Password": "你的实际证书密码", "KeyStorageFlags": "EphemeralKeySet" } } }
EphemeralKeySet标记会将证书密钥临时加载到内存,跳过Linux系统不支持的持久化密钥存储逻辑,避免解密错误。
3 调整容器监听地址
你当前配置的ASPNETCORE_URLS=https://localhost;http://localhost仅允许容器本地访问服务,修改docker compose中两个服务的环境变量为:
- ASPNETCORE_URLS=https://+;http://+
适配容器外部请求、同网桥其他服务的访问需求。
4 可选:重新生成兼容证书
上述步骤无效时,清理旧证书后生成专用开发证书:
- 删除本地
%APPDATA%\ASP.NET\Https目录下的DocumentUploader.pfx文件 - 执行命令生成新证书:
dotnet dev-certs https -ep %APPDATA%\ASP.NET\Https\DocumentUploader.pfx -p 你的证书密码 dotnet dev-certs https --trust
5 服务间通信优化
两个服务同属doc_manager网桥,内部通信不需要走外网端口、不需要用localhost地址,Document Manager调用Uploader API时直接使用服务名https://documentuploader即可,不会出现证书域名不匹配问题。
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

