URI 名称约束只接受带有 excludedSubtrees 的 IP 字面权限
作者: sinagkh创建于 2026年9月16日更新于 2026年9月17日
标签help wantedtriaged: bug
页:1
当URI名称限制活动时,OpenSSL接受一个叶证书,其URI主题AltName拥有IP-literal权威,如果所发行的CA只包含一个被排除在外的URI子树. 例如,受排除的;URI:bad.example.com'限制的CA接受含有URI:https://192.0.2.1/a'的叶子。
RFC 5280 第4.2.1.10节要求当URI限制适用时拒绝,而URI当局不包含DNS名称,包括其主机为IP地址时. 相应的被允许的子树控制被拒绝,因此结果取决于是否允许主动约束.
OpenSSL安全小组审查了我的私人报告,要求我将此作为普通公共错误存档.
测试的版本
- OpenSSL 4.02 (家用 " 开瓶 " )
- OpenSSL 3.6.3 (Homebrew `opensl@3' 瓶子)
- 手臂上的macOS 64号
截至2026-09-16,OpenSSL 4.0.2是最新稳定的OpenSSL发布. 完整的"五案"剧本与两个版本相抗衡并产生相同的结果.
- 复制
所附`repro.sh'只使用OpenSSL命令行应用程序。 它创建了可支配根,两个受限的中间CA,以及五个叶子证书,然后称为 " opensl 校验 " ,并有明确的信托投入,默认信托商店被禁用。
从空目录中运行 :
嘘 chmod +x repro.sh (英语). OPENSSL BIN=/路径/通/开./repro.sh
观测结果 :
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|.
|被排除在外,没有URI SAN |接受|接受|接受|接受|.
|被排除在外,无关的 DNS 权威 |被接受 |被接受 |被接受
|被排除在外,被排除在外 DNS 权威 |被拒 |被拒 |被拒
** 拒绝** ** 接受** ** 接受** * *
=================================================================================================================================================================================================
预期行为
应驳回唯一被排除在外的知识产权案件。 RFC 5280在应用URI限制时需要证书拒绝,URI权威使用IP地址而不是DNS名称:
https://www.rfc-editor.org/rfc/rfc5280.html#section-4.2.1.10 页面存档备份,存于互联网档案馆.
* 源一级解释
`nc uri()' 描述`https://192.0.2.1/a',接收`192.0.2.1'作为东道主,并将该案文与DNS限制进行比较。 由于它不匹配 “ bad. example.com ” , 函数返回 QQ509 V ERR PERMITED VIOLATION :
https://GitHub.com/openssl/blob/opensl-4.0..2/crypto/x509/v3 ncons.c#L779-L833 互联网档案馆的存檔,存档日期2014-12-21.
`nc match ()' 对两个子树列表不同地使用此返回值 。 在没有子树匹配时,允许的子树环路最终拒绝. 被排除在外的子树圈将QQ509 V ERR PERMITTED VIOLATION"视为普通非对接并持续,因此链被接受:
https://GitHub.com/openssl/blob/opensl-4.02/crypto/x509/v3 ncons.c#L503-L562 互联网档案馆的存檔,存档日期2014-12-22.
可能的修补是将一个IP-literal URI权威归类为不支持的名称语法后再与一个URI子树作比较,而不是将其代表为普通的DNS-子树不匹配.
. . . . . . .内容来源: openssl/openssl