ssl - 通过 deadpool-postgres 使用 TLS 时,Actix 服务器无法连接到 Postgres
问题描述
我有一个网络应用程序。我已经在生产中开发了一些基本功能。我已经把它放到了一个实时环境中,一次是在 Heroku 上,后来是在 DigitalOcean 上。在 live 中,与 Postgres 数据库的连接需要使用 TLS。在我尝试过的所有代码排列中,服务器都正确启动,但是任何加载页面的尝试都会导致此错误:thread 'actix-rt:worker:2' panicked at 'could not create db client from pool: Backend(Error { kind: Tls, cause: Some(Custom { kind: InvalidData, error: WebPKIError(UnknownIssuer) }) })'
.
我尝试从 AWS 服务器加载 PEM 文件(在 Heroku 的情况下,它使用 AWS Postgres 实例),添加 webpki 根,rustls 本机证书,甚至强制验证所有内容的授权者。同样的错误。
您可以在此处找到重现此错误的代码的最小版本。错误发生在src/main.rs:33:47
(在 Heroku 上转载)。
该应用程序中的环境变量是:
- server_addr=0.0.0.0
- pg.*=(来自我的数据库实例)
- use_ssl=true
- use_rustls_root_store=false
- add_webpki_roots=false
- use_custom_cert_resolver=false
我可以打开或关闭最后三个变量(控制 TLS 设置的各个部分)中的任何一个,这没有区别。相同的错误信息。与可选的 db_ca_cert 相同,可以设置为 pem 文件的名称,也可以不设置。没什么区别。
解决方案
我通过将我的应用程序转换为使用 sqlx 解决了这个问题。这在 Heroku 上按预期工作。我没有尝试过 DigitalOcean,但我希望它也能在那里工作。
推荐阅读
- python - 根据用户名过滤用户记录
- go - 值与指针:`*x=y` 是否等同于`x=&y`?
- svg - Webpack:无法使用文件加载器显示 SVG 图像(svg 解析错误)
- python - How can i send sms notification to 200 phone number and subscribe them to a topic in SNS
- docker - Docker 中 dotnet/aspnet:3.1 的清单条目中没有与 windows/amd64 10.0.14393 匹配的清单
- python - 找不到有效的 numpy 广播
- javascript - 为什么缩放模式在 Safari 中的行为不同,但在 Chrome 或 Firefox 中却不同
- flutter - VSCode - URI 目标不存在:'package:english_words/english_words.dart'
- javascript - 如何在 React js 中验证具有 api 值的文本字段?
- installation - Inno 设置中的绿线