关键词:根证书、中间证书、验证深度、ssl_verify_depth
在进行ssl验证前,服务器一般会向CA申请公钥证书,即将自己的公开密钥交给CA,CA用自己的私钥向服务器的公钥数字签名并返回公钥证书,在数字签名的过程中,CA一般会用根目录颁发证书,这种证书叫做根证书。
问题是,万一根目录颁发错了证书,或者需要撤销根,这时所有根目录颁发的证书都将失效,这样代价是巨大的,因此出现了中间根,顾名思义,CA用私钥对中间根进行签名,使它可信,因此由中间根颁发的证书也是可信的,即中间证书。当发生撤销时,只需要撤销中间根颁发的证书就可以。
这里需要解释一下根证书,个人理解为客户端在验证服务器的公钥证书时,需要拿CA的公钥来解密服务器公钥证书的签名,CA的根公钥需要提前拿到手,一般内置到浏览器中,存放的地方视为根目录,存放中间证书即为中间目录。有中间证书的情况下,应该是先从中间目录取到对应中间公钥解密,然后循环此过程,直到从根目录拿到公钥验证成功,这时可以算是验证通过。
在CA的证书体系中,证书从根目录出发,像一条链一样,有很多的中间根,也叫做证书链,我觉得更像一棵二叉树。
在ssl验证的过程中,直接尝试中间证书进行客户端认证是无法通过的,需要一层一层回溯验证,直到找到根。
这个验证深度就相当于当前中间证书在整棵树中的深度。
上面已经提到了,验证需要层层回溯,向上可以回溯多少次由ssl_verify_depth决定,当ssl_verify_depth = 1
时,回溯层数为0,即任何中间证书都不会通过验证,除非是根证书。简而言之,中间证书的深度要小于ssl_verify_depth的值,才会验证通过。
在nginx中ssl_verify_depth
的值默认是为1的。
句法: ssl_verify_depth number;
默认: ssl_verify_depth 1;
语境: http, server
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。