我想知道nginx.conf中的ssl_verify_depth是什么意思?文档并不是很详细,只有这句话:设置客户端证书链中的验证深度。增加或减少会有什么影响?我注意到将其增加会使nginx更容易接受证书,但为什么会这样呢?
深度实际上是中间证书颁发者的最大数量,即在验证客户端证书时允许跟随的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
从文档中的引用: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证书和最后一个信任锚证书。 https://www.openssl.org/docs/man1.1.1/man3/SSL_CTX_set_verify_depth.html#NOTES 注意:在openssl 1.0.2和1.1.0之间,其行为发生了变化。来源: https://mta.openssl.org/pipermail/openssl-dev/2017-April/009253.html