nginx.conf中ssl_verify_depth参数含义及调整影响的技术问询
关于Nginx中
ssl_verify_depth参数的详解 让我来把这个参数的细节给你掰扯清楚,毕竟官方文档确实说得太简洁了。
基本含义
ssl_verify_depth本质上是控制客户端证书链的验证层级数。
首先得明白:客户端提交的证书一般不是直接由根CA签发的,而是由中间CA(可能不止一级)签发,中间CA再由根CA签发,形成一条"证书链"。这个参数的数值,就是指定Nginx从客户端证书开始,往上追溯验证的最大层级数。举个例子:
- 如果设为
1:Nginx只会验证客户端证书的直接签发者(第一级中间CA)是否在信任列表里,不会再去验证这个中间CA的上级 - 如果设为
2:会验证客户端证书→中间CA→根CA这整个链条,只要根CA是信任的,就算中间CA不在信任列表里也能通过
调整数值的影响
减小数值(比如设为0或1)
- 性能略优:因为少了几层证书的验证步骤,对Nginx的资源消耗会稍微降低一点,但这个差异在大多数场景下几乎感受不到
- 验证更严格:如果客户端的证书链长度超过你设置的深度,直接会验证失败。比如客户端用的是三级CA签发的证书(客户端→中间CA1→中间CA2→根CA),你设了
1,Nginx只会检查中间CA1,要是它不在你的信任列表里,就会拒绝连接,哪怕根CA是信任的
增大数值(比如设为3、4甚至更高)
- 兼容性更好:能支持更长的证书链,只要整个链条最终能追溯到你信任的根CA,不管中间有多少级中间CA,都能通过验证
- 性能微降:需要多验证几层证书,但这个开销非常小,除非你有极端高并发的场景,否则不用在意
为什么增大值会让Nginx更易接受证书?
核心原因是更长的验证深度允许Nginx完整遍历证书链。
举个实际场景:假设客户端的证书链是「客户端证书→中间CA1→中间CA2→根CA」,而你的信任列表里只加了根CA。如果ssl_verify_depth设为2,Nginx只会验证到中间CA1,发现它不在信任列表里,直接拒绝;但如果把深度调到3,Nginx会继续往上验证中间CA2,直到找到根CA——只要根CA是信任的,就会认可整个证书链,自然就接受了这个客户端证书。
简单说,数值越大,Nginx能"容忍"的证书链层级越多,也就更容易接受那些链条较长但本身合法的客户端证书。
内容的提问来源于stack exchange,提问作者sashoalm
相关产品推荐
相关产品推荐

