为 Django Postgres 连接强制 SSL

Posted

技术标签:

【中文标题】为 Django Postgres 连接强制 SSL【英文标题】:Force SSL for Django Postgres connection 【发布时间】:2018-05-20 20:26:49 【问题描述】:

我想强制 Django 使用 SSL 连接到我的 postgres 数据库。

This question 表示我需要将sslmode='require' 传递给 psycopg2 连接调用。如何将此添加到 Django 的数据库参数中?

【问题讨论】:

【参考方案1】:

'OPTIONS': 'sslmode': 'require', 添加到您的数据库配置中。例如:

DATABASES = 
    'default': 
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': "db_name",
        'USER': "db_username",
        'PASSWORD': "db_password",
        'HOST': "db_host",
        'OPTIONS': 'sslmode': 'require',
    ,

作为jklingen92 points out,如果您使用数据库 URL,例如通过 django-environ,请将 ?sslmode=require 添加到数据库 URL 的末尾。例如:

postgres://<DB_USERNAME>:<DB_PASSWORD>@<DB_HOST>:<PORT>/<DB_NAME>?sslmode=require

【讨论】:

【参考方案2】:

如果您正在配置数据库 URL,则可以将选项作为查询参数传递:

DATABASE_URL=postgres://USER:PASSWORD@HOST:PORT/NAME?sslmode=require

这适用于Django Configurations 和Django Environ。 Django Configurations 是基于dj_database_url 构建的,所以你也可以像@frmdstryr 所说的那样传递ssl_require=True

DATABASES = values.DatabaseURLValue(environ_required=True, ssl_require=True)

【讨论】:

在哪里指定证书? @SandeepBalagopal 您可以通过将以下内容添加到 OPTIONS(以及上述 sslmode 属性)来指定 SSL 证书的路径: 'sslmode': 'require', 'sslcert': '/path/to/文件','sslkey':'/path/to/file','sslrootcert':'/path/to/file'【参考方案3】:

如果您使用的是dj_database_url,您可以传递ssl_require=True,它会为您设置选项。

import dj_database_url
DATABASES['default'] = dj_database_url.config(ssl_require=True)

【讨论】:

以上是关于为 Django Postgres 连接强制 SSL的主要内容,如果未能解决你的问题,请参考以下文章

postgres 上的 Django unique_together:由 ORM 或 DB 强制执行?

当 SSL SYSCALL 错误和 CONN_MAX_AGE > 0 时强制建立新的数据库连接

为啥 postgres 强制 sslmode=verify-full 虽然它不在连接字符串中

docker-compose 与 postgres 的 Django 连接

Django ORM 在 Postgres DB 上留下空闲连接

Django 无法创建到“postgres”数据库的连接,而是使用默认数据库 [关闭]