跳到主要内容

3. ECHConfig 文件 (ECHConfig File)

3. ECHConfig 文件 (ECHConfig File)

PEM ECH 文件包含零个或一个私钥, 以及一个已编码的 ECHConfigList. 公钥和私钥都必须采用 PEM 编码 [RFC7468].

该文件包含私钥的 PEM 编码 (如果存在) 与公钥的 PEM 编码 (作为 ECHConfigList) 的串接. 当存在私钥时, ECHConfigList 必须包含与该私钥匹配的 ECHConfig. 私钥必须编码为 PKCS #8 PrivateKey [RFC7468].

公钥必须是可按 [RFC9848] 中描述通过 HTTPS 资源记录发布到 DNS 的 ECHConfigList 值的 base64 编码形式. 公钥的 PEM 文件分隔符中必须使用字符串 "ECHCONFIG". PEM 编码的 ECHConfigList 之后的任何内容都应该被忽略.

图 1 展示了一个 ECHConfig PEM 文件示例.

-----BEGIN PRIVATE KEY-----
MC4CAQAwBQYDK2VuBCIEICjd4yGRdsoP9gU7YT7My8DHx1Tjme8GYDXrOMCi8v1V
-----END PRIVATE KEY-----
-----BEGIN ECHCONFIG-----
AD7+DQA65wAgACA8wVN2BtscOl3vQheUzHeIkVmKIiydUhDCliA4iyQRCwAEAAEA
AQALZXhhbXBsZS5jb20AAA==
-----END ECHCONFIG-----

图 1: ECHConfig PEM 文件示例

如果该 ECHConfigList 在 DNS 中为 foo.example.com 发布, 则可以如图 2 所示访问它.

$ dig +short HTTPS foo.example.com
1 . ech=AD7+DQA65wAgACA8wVN2BtscOl3vQheUzHeIkVmKIiydUhDCliA4iyQR
wAEAAEAAQALZXhhbXBsZS5jb20AAA==

图 2: 使用 dig 从 DNS 获取 ECHConfigList

使用这种文件格式的 TLS 服务器可能会把多个文件名配置为整体配置的一部分, 例如当这些文件中只有一部分 ECHConfigList 值要在 ECH fallback 场景中用作 retry_configs 时.

PEM 文件中的 ECHConfigList 可能包含多个 ECHConfig, 例如当这些值包含不同扩展或不同 public_name 值时. 与 [RFC9849] 一致, ECHConfig 值按偏好递减顺序出现. 如果 ECHConfigList 被用作 retry_configs, 它可能包含不同的公钥. 尽管如此, 当存在私钥时, 该密钥必须与某个 ECHConfig 值中的公钥匹配.