ssl双向验证— ssl_verify_depth的作用

前言

关键词:根证书、中间证书、验证深度、ssl_verify_depth

根证书与中间证书

​在进行ssl验证前,服务器一般会向CA申请公钥证书,即将自己的公开密钥交给CA,CA用自己的私钥向服务器的公钥数字签名并返回公钥证书,在数字签名的过程中,CA一般会用根目录颁发证书,这种证书叫做根证书。

​问题是,万一根目录颁发错了证书,或者需要撤销根,这时所有根目录颁发的证书都将失效,这样代价是巨大的,因此出现了中间根,顾名思义,CA用私钥对中间根进行签名,使它可信,因此由中间根颁发的证书也是可信的,即中间证书。当发生撤销时,只需要撤销中间根颁发的证书就可以。

​这里需要解释一下根证书,个人理解为客户端在验证服务器的公钥证书时,需要拿CA的公钥来解密服务器公钥证书的签名,CA的根公钥需要提前拿到手,一般内置到浏览器中,存放的地方视为根目录,存放中间证书即为中间目录。有中间证书的情况下,应该是先从中间目录取到对应中间公钥解密,然后循环此过程,直到从根目录拿到公钥验证成功,这时可以算是验证通过。

验证深度

​在CA的证书体系中,证书从根目录出发,像一条链一样,有很多的中间根,也叫做证书链,我觉得更像一棵二叉树。

​在ssl验证的过程中,直接尝试中间证书进行客户端认证是无法通过的,需要一层一层回溯验证,直到找到根。

​这个验证深度就相当于当前中间证书在整棵树中的深度。

ssl_verify_depth

​上面已经提到了,验证需要层层回溯,向上可以回溯多少次由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
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
`CURLOPT_SSL_CTX_FUNCTION` 是一个 libcurl 的选项,它可以用来设置一个回调函数,该回调函数在 SSL/TLS 握手时被调用。该回调函数应该返回一个 SSL_CTX 指针,该指针将被用于 SSL/TLS 连接。 以下是一个示例代码,展示了如何使用 `CURLOPT_SSL_CTX_FUNCTION`: ``` #include <curl/curl.h> #include <openssl/ssl.h> // 自定义回调函数 static CURLcode sslctx_callback(CURL * curl, void * ssl_ctx, void * userptr) { SSL_CTX * ctx = (SSL_CTX *)ssl_ctx; // 在 SSL_CTX 中设置一些选项 SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, NULL); SSL_CTX_set_verify_depth(ctx, 2); return CURLE_OK; } int main() { CURL * curl = curl_easy_init(); if(curl) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, "https://example.com"); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1); curl_easy_setopt(curl, CURLOPT_CAINFO, "/path/to/cacert.pem"); curl_easy_setopt(curl, CURLOPT_SSL_CTX_FUNCTION, sslctx_callback); res = curl_easy_perform(curl); if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); curl_easy_cleanup(curl); } return 0; } ``` 在上面的代码中,我们使用 `curl_easy_setopt` 函数来设置 `CURLOPT_SSL_CTX_FUNCTION` 选项,将自定义回调函数 `sslctx_callback` 传递给 libcurl。在该回调函数中,我们可以通过传入的 SSL_CTX 指针对 SSL/TLS 连接进行一些自定义设置,例如设置验证选项等。最后,我们需要调用 `curl_easy_perform` 函数来执行 HTTPS 请求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值