ssl_verify_depth在nginx.conf中的含义是什么?

4
我想知道nginx.conf中的ssl_verify_depth是什么意思?文档并不是很详细,只有这句话:
设置客户端证书链中的验证深度。
增加或减少会有什么影响?我注意到将其增加会使nginx更容易接受证书,但为什么会这样呢?

https://dev59.com/0moy5IYBdhLWcg3wnfUi#14895039 - IVO GELOV
2个回答

8
深度实际上是中间证书颁发者的最大数量,即在验证客户端证书时允许跟随的CA证书数目。
深度为0表示仅接受自签名客户端证书, 默认深度为1表示客户端证书可以是自签名的,也可以由服务器直接知道的CA签名(即CA证书在SSLCA证书路径下),等等。 深度为2表示接受由单层中间CA签名的证书,即由一个中间CA签名的证书,其CA证书由服务器直接知道的CA签名。
我们关于此指令的perl测试有一些非常有用的注释,并将帮助您更好地理解我在NGINX上下文中的解释。

https://github.com/nginx/nginx-tests/blob/7a9e95fdd30729540ee9650be7f991c330367d5b/ssl_verify_depth.t#L145


1
那么打个比方,如果证书是人的话,ssl_verify_depth=0 就意味着你只信任你个人认识的人,而 1 则表示你信任朋友的朋友,2 表示朋友的朋友的朋友,以此类推,对吧? - sashoalm
顺便提一下,当我将ssl_verify_depth设置为0时,nginx会接受由证书颁发机构签名的证书。因此,在这张图片中,证书只需要深度1才能被接受(深度<=链长度-根CA-叶子)。 - sashoalm
是的,这是正确的。将其设置为0将仅允许自签名证书与验证深度为0,只应使用自签名证书(来自NGINX测试)。你的比喻是正确的。如果这回答了你的问题,希望你能将其标记为答案。如果你需要更多信息,请告诉我。 - Timo Stark
好的解释。你能在这个serverfault问题上重新发布吗? - undefined

1
从文档中的引用:
SSL_CTX_set_verify_depth()和SSL_set_verify_depth()设置了终端实体和信任锚证书之间证书数量的限制。终端实体和信任锚证书都不计入深度限制。如果到达受信任发行者所需的证书链长度超过depth+2,将发出X509_V_ERR_CERT_CHAIN_TOO_LONG错误。深度计数为"级别0:对等证书","级别1:CA证书","级别2:更高级别的CA证书",以此类推。将最大深度设置为2允许级别0、1、2和3(0表示终端实体,3表示信任锚)。默认的深度限制是100,最多允许对等证书、100个中间CA证书和最后一个信任锚证书。 注意:在openssl 1.0.2和1.1.0之间,其行为发生了变化。
来源:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接