如果我的应用程序未启用 SSL,为什么连接到 Azure 中的 Postgres 服务器会失败?

Why does connection to my Postgres server in Azure fail if my app does not have SSL enabled?

当我尝试从未启用 SSL 的 app/client 连接到 Azure 中的 postgres 服务器时出现连接失败。

无法连接到服务器: 致命:需要 SSL 连接。请指定 SSL 选项并重试。

这是一个很强的要求吗?有什么办法可以绕过这个要求吗?

默认情况下,Azure Database for PostgreSQL 在服务器和客户端应用程序之间强制执行 SSL 连接,以防止 MITM(中间人)攻击。这样做是为了尽可能安全地连接到您的服务器。

虽然不推荐,但如果您的客户端应用程序不支持 SSL 连接,您可以选择禁用要求 SSL 连接到您的服务器。请检查 How to Configure SSL Connectivity 以了解您在 Azure 中的 Postgres 服务器的详细信息。您可以从门户或使用 CLI 禁用要求 SSL 连接。请注意,Azure 不建议在连接到服务器时禁用要求 SSL 连接。

与其绕过此错误并简单地禁用 SSL,您可能还想尝试通过增加连接字符串来简单地启用 SSL:

"Server=SERVERNAME.postgres.database.azure.com;
    Port=5432;Database=DBNAME;
    User Id=DBUSER@SERVERNAME;
    Password=PASSWORD;
    SslMode=Require";

注意到末尾的 SslMode=Require 后缀了吗?这也适用于 Npgsql(假设您使用 C#)以连接到 Azure Database for Postgresql。

对我有帮助:

psql -v sslmode=true -h myapp.postgres.database.azure.com -U my_db_admin@myapp postgres

我刚刚更改了我的依赖关系

compile group: 'postgresql', name: 'postgresql', version: '8.1-407.jdbc3' 


runtimeOnly 'org.postgresql:postgresql'build.gradle 文件中。 它工作正常。

来自the docs

If your PostgreSQL server requires TLS/SSL connections (on by default in Azure Database for PostgreSQL servers), set an environment variable PGSSLMODE=require so that the pg_restore tool connects with TLS. Without TLS, the error may read FATAL: SSL connection is required. Please specify SSL options and retry.

例如,在 Bash 下将是 export PGSSLMODE=require,然后是 运行 pg_restore

就我而言,我遇到了以下错误

Password for user user@server-name: 
psql: server closed the connection unexpectedly
    This probably means the server terminated abnormally
    before or while processing the request.
FATAL:  SSL connection is required. Please specify SSL options and retry.

那是因为我输入的密码错误。因此,请检查您的密码,如果密码错误,可能会出现类似的错误。

希望这对某人有所帮助...

根据 https://www.npgsql.org/doc/connection-string-parameters.html,正确的参数是“SSL Mode=Require” 我没有为我工作“SslMode=Require”

您可以为 Postgres 设置禁用 Azure 云本身的 SSL 功能!