# ssl_ciphers

> ssl_ciphers 定义 TLS 1.2 及更低版本允许使用的密码套件列表。
---

> [!NOTE]
> **Fact — 官方简述译文**：设置 TLS 1.2 及更低版本允许使用的密码套件列表。

## 身份 {#identity}

| 字段 | 值 | 含义 |
| --- | --- | --- |
| 类型 | `string` | 上游 pg_settings 类型 |
| Context | `sighup` | 配置 reload 后生效 |
| 单位 | — | 原始单位 |
| 范围 | — | 最后在档版本的原始上下限 |
| 枚举值 | — | 非枚举类型记为 — |
| 分类 | Connections and Authentication / SSL | 上游分类 |
| 最后 boot 值 | `HIGH:MEDIUM:+3DES:!aNULL` | HIGH:MEDIUM:+3DES:!aNULL |
{.fields meta="-"}

## 生命周期 {#lifecycle}

| Fact | 值 |
| --- | --- |
| 首次观测 | PG9.1 |
| 在档版本 | PG9.1–19 Beta 3 |
| 移除版本 | 否 |
| 引入提交 | 不作断言：名称在 2008 Git 历史边界已经存在 |
| 提交日期 | ≤ 2008-01-01 |
| Discussion | — |

## 默认值变迁 {#default-history}

| 版本 | 原始 `boot_val` | 单位 | 人类可读值 |
| --- | --- | --- | --- |
| PG9.1–9.2 | `ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH` | — | ALL:!ADH:!LOW:!EXP:!MD5:@STRENGTH |
| PG9.3 | `DEFAULT:!LOW:!EXP:!MD5:@STRENGTH` | — | DEFAULT:!LOW:!EXP:!MD5:@STRENGTH |
| PG9.4–19 Beta 3 | `HIGH:MEDIUM:+3DES:!aNULL` | — | HIGH:MEDIUM:+3DES:!aNULL |
{.full-width caption="PG9.0–19 Beta 3 实测 boot 默认值"}

## 机制详解 {#mechanism}

ssl_ciphers 名称在本项目 2008 年历史边界以及 PG9.0 的 GUC 源码中已经存在，但只在定义 USE_SSL 时编译。本项目可审计的 PG9.0 备用构建没有启用 OpenSSL，因此该名称首次出现在 PG9.1 官方镜像快照；这个矩阵边界反映构建能力，而不是功能最初发明时间。

该 OpenSSL 密码字符串控制 TLS 1.2 及更低版本握手；PG18+ 的 TLS 1.3 套件由 ssl_tls13_ciphers 单独配置。SIGHUP reload 会改变新 TLS 上下文和新连接使用的策略，但不会重新协商已经建立的会话。

应把 ssl_ciphers 视为完整传输策略的一部分，与 ssl、pg_hba.conf、证书和私钥、CA 与吊销设置、协议上下限、ssl_groups 及客户端能力联合验证。必须针对实际安装的 OpenSSL 构建测试，因为可接受的密码名称与安全级别依赖库版本。

## 调优建议 {#tuning-advice}

> [!TIP]
> **Advice。** 以下建议是工作负载起点，必须用真实测量验证。

| 场景 | 建议 |
| --- | --- |
| OLTP | 把 ssl_ciphers 作为传输安全策略而非性能旋钮。遵循组织 TLS 基线，并测试证书轮换、重新加载及每类客户端。 |
| OLAP | 分析流量应采用相同 TLS 下限；大流量可能暴露 CPU 成本，但只能在正确性之后压测，不能据此接受过时协议。 |
| 小规格 | 保持 ssl_ciphers 简单且安全，使用托管证书与针对当前 OpenSSL 版本评审过的库默认值，并在到期前演练续期。 |
{.full-width}

## Pigsty 取值 {#pigsty}

以下值来自固定 8 核、32 GiB、100 GiB SSD 夹具，并按 PG19 Beta 3 渲染当前 Pigsty 模板；这不表示 Pigsty 当前支持该历史或测试版本。

| 模板 | 有效值 | 与上游 boot 比较 | 源表达式 |
| --- | --- | --- | --- |
| OLTP | 未修改 | — | — |
| OLAP | 未修改 | — | — |
| CRIT | 未修改 | — | — |
| TINY | 未修改 | — | — |
{.full-width}

> [!CAUTION]
> **Advice — 待人工复核。** 当前 Pigsty 模板投影事实：OLTP: PG9.1–19 Beta 3 未修改；OLAP: PG9.1–19 Beta 3 未修改；CRIT: PG9.1–19 Beta 3 未修改；TINY: PG9.1–19 Beta 3 未修改。 未发现覆盖值，因此不推断 Pigsty 专属理由。

## 常见坑 {#common-pitfalls}

- 编辑 ssl_ciphers 后没有重新加载配置，也没有核对有效值与后续行为。
- 只更新一个 TLS 文件或策略参数，留下无效证书链、不可读私钥或不兼容协议集合。
- 误以为重新加载会重新协商既有会话；TLS 策略变化只影响新握手。
- 没有回滚计划及客户端或运维兼容测试，就全局修改 ssl_ciphers。

## 关联参数 {#related-parameters}

[`ssl_tls13_ciphers`](/zh/parameters/ssl-tls13-ciphers/) · [`ssl_min_protocol_version`](/zh/parameters/ssl-min-protocol-version/) · [`ssl_max_protocol_version`](/zh/parameters/ssl-max-protocol-version/) · [`ssl_prefer_server_ciphers`](/zh/parameters/ssl-prefer-server-ciphers/) · [`ssl_groups`](/zh/parameters/ssl-groups/)

## 参考资料 {#references}

- [PostgreSQL 19 Beta 3 — ssl_ciphers](https://www.postgresql.org/docs/19/runtime-config-connection.html#GUC-SSL-CIPHERS)
- [PostgreSQL 19 发行说明](https://www.postgresql.org/docs/19/release-19.html)
- [机器可读 GUC 全量导出](/data/guc.jsonl)
