【发布时间】:2021-06-14 03:56:55
【问题描述】:
我有一个网络应用程序。我已经在生产中开发了一些基本功能。我已经把它放到了一个实时环境中,一次是在 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)。
该应用程序中的环境变量是:
- 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 文件的名称,也可以不设置。没有区别。
【问题讨论】:
-
我更新了我的 Cargo.toml 以使用 actix-web v4(在撰写本文时它处于测试阶段)。由于使用 actix-web v3 的运行时问题,这使我能够将一些 tokio 和 rustls 包更新到最新版本。但是,即使使用 actix-web v4,Heroku 上仍然会出现 UnknownIssuer 错误。
-
我可以通过将
TlsConnector::new()更改为TlsConnector::builder().danger_accept_invalid_certs(true).build()来解决类似的问题。
标签: ssl rust actix-web rust-actix tokio-postgres