我有一个网络应用。我已经在生产中开发了一些基本功能。我已经把它放到了一个实时环境中,一次是在 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 本机证书,甚至强制验证所有内容的授权方。同样的错误。
您可以找到重现此错误的代码的最小版本 here。错误发生在 src/main.rs:33:47
(在 Heroku 上重现)。
该应用中的环境变量是:
我可以打开或关闭最后三个变量(控制 TLS 设置的各个部分)中的任何一个,这没有任何区别。同样的错误信息。与可选的db_ca_cert 相同,可以设置pem 文件的名称,也可以不设置。没什么区别。
答案 0 :(得分:0)
我已经通过将我的应用程序转换为使用 sqlx 解决了这个问题。这在 Heroku 上按预期工作。我还没有尝试过 DigitalOcean,但我希望它也能在那里工作。