如何在OpenSSL的openssl.cnf中使用X.509v3名称约束扩展仅允许指定域名
如何在OpenSSL的openssl.cnf中使用X.509v3名称约束扩展仅允许指定域名
你提到的配置方向是完全正确的,咱们来把细节拆解清楚:
首先,你写的这条指令:
nameConstraints = critical, permitted;DNS:.example.com
确实能实现仅允许example.com及其所有子域名的效果——因为permitted类型的名称约束会定义唯一被允许的域名范围,所有未被列在permitted里的名称都会被自动排除,这和你提到的sshd中“只指定允许项就默认排他”的逻辑是一致的。
这里有几个关键细节需要留意:
- 一定要加上
critical标记:它会强制依赖该证书的应用程序必须检查这个名称约束,忽略不符合规则的域名,避免因应用不检查约束而导致限制失效。 - DNS项的写法差异:
.example.com会匹配example.com本身以及所有层级的子域(比如sub.example.com、test.sub.example.com);如果只想允许example.com本身而不包含子域,直接写DNS:example.com即可。 - 如果需要允许多个独立的域名范围,比如同时允许
.example.com和.test.org,可以这样配置:
nameConstraints = critical, permitted;DNS:.example.com, permitted;DNS:.test.org
额外补充:如果你的需求是排除特定域名、允许其余所有域名,那就要用excluded类型的约束,但这和你当前的需求正好相反,所以暂时不用考虑这种写法。
备注:内容来源于stack exchange,提问作者lmo
相关产品推荐
相关产品推荐

