如果我的应用没有启用SSL,为什么连接到我在Postgres服务器的Azure会失败?

时间:2017-05-17 17:50:16

标签: postgresql azure azure-database-postgresql

当我尝试从我的应用程序/客户端连接到Azure中的postgres服务器时没有启用SSL,导致连接失败。

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

这是一个强烈的要求吗?有没有办法可以绕过这个要求?

5 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:3)

您可能还想尝试通过拉长连接字符串来启用SSL,而不是绕过此错误并简单地禁用SSL:

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

注意最后的SslMode=Require后缀?这也适用于Npgsql(假设您使用C#)连接到Postgresql的Azure数据库。

答案 2 :(得分:1)

它帮助我:

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

答案 3 :(得分:0)

我刚刚从更改了依赖性

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


runtimeOnly 'org.postgresql:postgresql'文件中的build.gradle。 一切正常。

答案 4 :(得分:0)

来自the docs

如果您的PostgreSQL服务器需要TLS / SSL连接(默认情况下处于启用状态) 在适用于PostgreSQL服务器的Azure数据库中)设置环境变量 PGSSLMODE = require,以便pg_restore工具与TLS连接。 如果没有TLS,则错误可能显示为FATAL:需要SSL连接。 请指定SSL选项,然后重试。

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