
文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载导读当 PostgreSQL 服务器配置了强制 SSL/TLS 加密策略时直接用psql连接会立即被服务器拒绝并报错。本文基于 til 仓库中 force-ssl-when-making-a-psql-connection.md 的实战笔记系统讲解通过sslmoderequire强制建立加密连接的两种主流方式连接字符串与命令行参数并延伸到 SSL 模式取值、常见运维场景RDS、Heroku、dump 恢复以及 SSL 支持缺失时的排查思路。读完本文你将能独立解决 FATAL: SSL/TLS required 报错并为任意远程 PostgreSQL 建立加密的 psql 会话。问题场景服务器要求 SSLpsql 却被拒之门外现代 PostgreSQL 服务器尤其是云托管实例通常会在postgresql.conf中开启强制 SSL 策略例如ssl on配合pg_hba.conf中的hostssl规则。此时如果直接以明文方式发起连接服务器会立刻终止握手并返回psql: error: FATAL: SSL/TLS required这一报错含义非常明确服务器要求 SSL/TLS 加密而当前连接没有携带加密协商参数。psql 默认的sslmode是prefer优先加密但不强制在服务器明确要求加密时psql 需要显式声明sslmoderequire才能完成连接。解法核心在连接参数中加入 sslmoderequire解决方式非常直接在 psql 的连接参数中追加sslmoderequire键值对让客户端主动声明本连接必须使用 SSL 加密。该参数可通过两种途径传入——连接字符串URI或命令行参数标志。方式一连接字符串URI追加查询参数使用形如postgres://的完整连接字符串时直接在末尾追加?sslmoderequire查询参数即可$ psql postgres://username:passwordhost.com/dbname?sslmoderequire参数拆解postgres://PostgreSQL 的标准 URI 协议前缀username:password数据库用户名与密码也可省略密码改用PGPASSWORD环境变量注入避免密码出现在 shell 历史中host.com数据库主机地址dbname目标数据库名?sslmoderequire查询参数形式的 SSL 模式声明这是强制加密的关键。URI 形式也适用于其他 libpq 系工具例如pg_dump、pg_restore同样可以复用postgres://...?sslmoderequire形式的连接串。方式二命令行参数标志使用 --set 传递如果习惯使用-h、-U等独立连接标志可以借助--set短写-c向 psql 注入 libpq 参数$ PGPASSWORDpassword psql \ --setsslmoderequire \ -h host.com \ -U username \ dbname参数拆解PGPASSWORDpassword以环境变量方式提供密码避免在命令行明文暴露--setsslmoderequire通过--set设置 libpq 连接参数sslmode为require等价于连接串中的?sslmoderequire-h host.com指定主机-U username指定用户末尾dbname目标数据库名。psql 在解析连接时会把--set传入的键值对并入连接参数集合与 URI 查询参数遵循同一套 libpq 参数语义因此两种写法效果等价可按使用习惯任选其一。纵深扩展sslmode 的取值与加密强度sslmode是 libpq 连接参数除require外还有多个取值理解它们有助于在不同安全需求下选择正确档位取值行为典型用途disable完全不使用 SSL纯明文仅限本地/内网可信环境allow优先明文服务器要求时才加密兼容性优先的旧客户端prefer默认优先加密不支持时降级明文通用默认值require强制加密但不校验服务器证书本文场景服务器强制 SSL 时保底可用verify-ca强制加密并校验服务器证书链防止中间人攻击verify-full强制加密、校验证书链且校验主机名匹配生产环境最高安全标准当服务器策略是必须 SSL时最低要求是require若需要抵御中间人攻击、确认服务器身份应升级到verify-ca或verify-full后者还要求证书中的主机名与连接目标一致云数据库通常需要配合 CA 证书文件使用。实战场景为远程 PostgreSQL 强制加密连接该技巧在连接各类远程 PostgreSQL 时几乎必然用到仓库中的其他笔记提供了若干可直接套用的上下文连接 AWS RDS PostgreSQL仓库笔记 devops/connect-to-an-rds-postgresql-database.md 展示了通过安全组放行 5432 端口后用psql连接 RDS 实例的方式。由于 RDS 默认启用 SSL将原文命令与sslmoderequire结合即可得到加密版本$ psql postgres://rdsusernamemy-rds-endpoint.cbazqrhkmyo.us-east-1.rds.amazonaws.com:5432/postgres?sslmoderequire其中--port 5432已内联到 URI 的:5432段--user rdsusername对应 URI 中的用户名数据库postgres对应路径段。连接 Heroku 托管数据库Heroku 的 PostgreSQL 也默认要求加密连接。仓库笔记 heroku/connect-to-a-database-by-color.md 使用heroku pg:psql --app my-app连接默认库底层同样会携带加密参数当通过heroku config:get DATABASE_URL拿到原始连接串后可直接拼接?sslmoderequire用 psql 手动连接。批量执行 SQL 时也可参考 heroku/run-sql-against-remote-postgres-database.md 的重定向思路对加密连接同样成立。恢复 dump 时强制加密在 postgres/dump-all-databases-to-a-sql-file.md 中pg_dumpall导出的 SQL 通过以下命令恢复$ psql -f postgres_13_1_cluster_dump.sql postgres若目标服务器要求 SSL将恢复命令改造为$ psql postgres://username:passwordhost.com/postgres?sslmoderequire -f postgres_13_1_cluster_dump.sql这样既保留了-f执行脚本的能力又满足了服务器的加密要求。常见问题排查SSL support 未编译进客户端如果已经加上sslmoderequire却仍出现类似以下提示说明当前安装的 PostgreSQL 客户端在编译时未启用 SSL 支持psql: error: ... SSL support not compiled in这种情况通常发生在通过asdf、Homebrew 等包管理器安装的 PostgreSQL 上——部分安装路径默认不链接 OpenSSL。原文档给出的解决思路是重新安装带 SSL 支持的 PostgreSQL仓库笔记 postgres/dump-all-databases-to-a-sql-file.md 中也有提及。在重装前可用以下命令快速确认当前客户端是否具备 SSL 能力$ psql --version # 查看版本 $ pg_config --configure # 查看编译配置中是否包含 --with-openssl若pg_config --configure的输出中没有--with-openssl即可确认客户端缺少 SSL 支持需要以带 OpenSSL 的方式重新编译安装例如 asdf 安装时启用 openssl 插件、brew 安装postgresql15时选择含 SSL 的构建重装后sslmoderequire即可正常工作。小结服务器报FATAL: SSL/TLS required时在连接参数中追加sslmoderequire即可强制建立加密连接两种等价写法URI 追加?sslmoderequire或使用--setsslmoderequire配合-h/-U/PGPASSWORD生产环境建议进一步使用verify-full以校验服务器身份抵御中间人攻击若提示 SSL support 未编译进客户端需重新安装带 OpenSSL 支持的 PostgreSQL该技巧可无缝套用于 RDS、Heroku 等强制加密的托管数据库以及pg_dumpall/pg_restore等 libpq 系工具的恢复流程。赞分享文档教程知识库【免费下载链接】til:memo: Today I Learned项目地址https://gitcode.com/gh_mirrors/ti/til点击查看免费下载相关推荐Mongoose项目中使用TLS/SSL连接MongoDB的完整指南Mongoose项目中使用TLS/SSL连接MongoDB的完整指南 前言 在现代数据库应用中数据安全传输至关重要。Mongoose作为Node.js生态中最数据库后端使用 psql 远程连接 AWS RDS PostgreSQL安全组放行与连接命令实战TIL使用 psql 远程连接 AWS RDS PostgreSQL安全组放行与连接命令实战TIL 本篇指南讲解如何用 psql 从本地开发机远程连接 AWS文档教程知识库HTTP API 设计指南无例外强制 TLS 安全连接Require Secure ConnectionsHTTP API 设计指南无例外强制 TLS 安全连接Require Secure Connections 导读 本文是 HTTP API DesignAPI设计教程创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考