为 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 连接