最近使用C++ libcurl库,能够构建一个HTTP请求以及其他协议请求。对curl_setopt函数进行一些知识总结以免忘记。
CURLcode curl_easy_setopt(CURL *curl, CURLoption option, ...);
三个点号代表后面还有未知个参数,这个和printf函数是一样的,可以去网上查查看这个。
- 第一个参数:使用curl_init函数创建出来的对象。
- 第二个参数:属性。有很多种。
- 第三个参数:如果有,可能是属性的值,比如一些true或false,或者数字。
现在主要讲 CURLOPT_SSL_VERIFYHOST 选项,在libcurl早期版本中,这个参数的值,也就是第三个参数是bool型,后来又出现检查CN字段(SSL/TLS)中出现的。 在之后版本中,这个值就已经不够用了,而开发者也经常因为之前使用这个函数设置为True或False(之前死两个值)而出错(现在是三个值)。
0 :不检查证书
1 :检查证书不检查域名
2 :既检查证书又检查域名
曾经做过HTTPS请求分析,对这个三个状态还是比较熟悉,我来解释一下。
首先不检查证书,一些网站虽然在HTTP协议上加入了SSL和TLS加密,对服务器和客户端做中间人攻击,发现服务器端根本不会检查证书,也就是它空有一个加密协议,而没有校验你的证书;
下一步就是检查证书,而没有检查域名,也就是说你可以随意用一个假的证书,就能骗过服务器,与你中间程序交互,这种也不太可靠,随便用一些工具生成证书就能蒙混过关;
最后一种是既检查证书,又能要检测域名,第二种是空有一个证书的,是没有host域名的,而且这个域名是服务器相对应的,即使是一个合格证书,有一个域名,和服务器对不上,还是没有作用,欺骗不了服务器。
所以在做中间人攻击的时候,空有一个证书是吓唬不了人的,大家应该有信心,帮助互联网公司完成标准化,哈哈哈…
回到这个主题,新版本已经废除了为1的选项,现在只存在0或2的选值。(默认是2)