libcurl:https认证控制参数简介

这篇具有很好参考价值的文章主要介绍了libcurl:https认证控制参数简介。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

1 背景

2 curl命令

3 libcurl 控制参数

4 双向认证

5 参考文档


1 背景

        在使用浏览器访问https链接时,浏览器会自动请求网站的安全证书,并进行证书校验,以及(使用证书)参与后续的通道加密逻辑。

        而使用curl(不管是curl.exe命令行工具,还是使用libcurl库)请求https时,在curl的标准逻辑里面,它也会使用类似浏览器的流程,进行证书校验和加密,此时这个证书校验流程对于使用者来说,可能是需要定制的(譬如不校验,标准校验,甚至双向校验东等)。

        本文主要讨论通过设置libcurl的参数,来控制这个校验过程。

2 curl命令

        2.1 忽略证书校验
        curl --location "https://s.example.com/" --insecure

        2.2 指定CA证书
        curl --cacert "<path of ca.pem>"

3 libcurl控制参数(终端验证服务器)

        3.1 CURLOPT_CAINFO 
        3.1.1 指定一个具体的CA证书路径(完整路径)
        3.1.2 https://curl.se/libcurl/c/CURLOPT_CAINFO.html
        3.1.3 e.g.

CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/");
  curl_easy_setopt(curl, CURLOPT_CAINFO, "/etc/certs/cabundle.pem");
  ret = curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}

        3.2 CURLOPT_CAPATH 
        3.2.1 指定一个CA证书的路径(里面可以放置多个证书)
        3.2.2 https://curl.se/libcurl/c/CURLOPT_CAPATH.html

        3.3 CURLOPT_SSL_VERIFYPEER
        3.3.1 https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYPEER.html
        3.3.2 是否校验服务器证书,设置为1(缺省值)表示校验,设置为0表示不校验
        3.3.3 e.g.

CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com");
 
  /* Set the default value: strict certificate check please */
  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
 
  curl_easy_perform(curl);
}

        3.4 CURLOPT_SSL_VERIFYHOST
        3.4.1 https://curl.se/libcurl/c/CURLOPT_SSL_VERIFYHOST.html
        3.4.2 这个值配合3.3的CURLOPT_SSL_VERIFYPEER使用,标识校验服务器证书的哪些内容。设置为2(缺省值)表示既校验证书的有效性,并且要校验证书的Common Name和实际访问的域名是匹配的(也就是标准的严格校验)。设置为0则表示只校验证书的有效性,不校验证书的Common Name。
        3.4.3 如果 CURLOPT_SSL_VERIFYPEER 设置为0,则设置 CURLOPT_SSL_VERIFYHOST 无意义(会被libcurl自动设置为0)。
        3.4.4 另外一些历史原因,这个值 CURLOPT_SSL_VERIFYHOST 曾经可以设置为1,在新版libcurl里面已经废除,可以参考3.4.1的相关内容。

4 双向认证参数

        4.1 一般双向认证指客户端认证服务端,并且服务端也认证客户端。但是因为客户端认证服务端比较常见,这里只讨论服务端认证客户端的情形下,终端需要设置的参数,这种场景下客户端须向服务端提供自己的证书。

        4.2 CURLOPT_SSLCERTTYPE
        4.2.1 https://curl.se/libcurl/c/CURLOPT_SSLCERTTYPE.html
        4.2.2 指定终端证书的类型:一般是 "PEM" or "DER"。

        4.3 CURLOPT_SSLCERT
        4.3.1 https://curl.se/libcurl/c/CURLOPT_SSLCERT.html
        4.3.2 指定终端证书的完整路径,一般是和 CURLOPT_SSLCERTTYPE 一起使用。

        4.4 CURLOPT_SSLKEYTYPE
        4.4.1 https://curl.se/libcurl/c/CURLOPT_SSLKEYTYPE.html
        4.4.2 配合CURLOPT_SSLKEY使用,指定终端证书私钥类型,一般使用 "PEM" 格式

        4.5 CURLOPT_SSLKEY
        4.5.1 https://curl.se/libcurl/c/CURLOPT_SSLKEY.html
        4.5.2 指定终端证书的私钥文件全路径(嘿,为什么要指定私钥?大家可以思考下!)。

        4.6 CURLOPT_KEYPASSWD
        4.6.1 https://curl.se/libcurl/c/CURLOPT_KEYPASSWD.html
        4.6.2 指定私钥证书的密码,配合 CURLOPT_SSLKEY 使用。
        4.6.3 e.g.

CURL *curl = curl_easy_init();
if(curl) {
  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin");
  curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "superman");
  ret = curl_easy_perform(curl);
  curl_easy_cleanup(curl);
}

5 参考文档

        [1] linux c++ curl https 请求并双向验证SSL证书 https://www.cnblogs.com/yongpan/p/8084854.html

        [2] 证书类型原理及转换方式 https://segmentfault.com/a/1190000011709784

        [3] https双向认证 https://blog.csdn.net/u014644574/article/details/126190061

        [4] HTTPS运行流程 https://zhuanlan.zhihu.com/p/60033345文章来源地址https://www.toymoban.com/news/detail-597828.html

到了这里,关于libcurl:https认证控制参数简介的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 计算机网络 - http协议 与 https协议(2)

    本篇介绍了构造http请求的的五种方式,简单的使用postman构造http请求,进一步了解https, 学习https的加密过程,了解对称密钥与非对称密钥对于加密是如何进行的,如有错误,请在评论区指正,让我们一起交流,共同进步! 本文开始 1) 直接在浏览器中的地址栏中输入一个 u

    2024年02月13日
    浏览(62)
  • HTTP 和 HTTPS 协议原理【网络基础】

    友情链接: HTTP协议【网络基础/应用层】 简单:HTTP 是一种文本协议,易于理解和实现。HTTP 的请求和响应都由起始行、首部字段和可选的消息主体组成,每个部分都有明确的语法规则。HTTP 的方法、状态码和首部字段都有标准化的定义,方便开发者遵循。 灵活:HTTP 是一种无

    2024年02月09日
    浏览(58)
  • 网络协议分析-http/https/tcp/udp

    “三次握手”的目的是“为了防止已失效的连接请求报文段突然又传送到了服务端,因而产生 错误”。主要目的防止 server 端一直等待,浪费资源。换句话说,即是为了保证服务端能收 接受到客户端的信息并能做出正确的应答而进行前两次(第一次和第二次)握手,为了保证客

    2024年02月11日
    浏览(48)
  • 【Linux网络】网络应用层的 http 和 https协议

    在之前学习序列化和反序列化的时候,认识到主机之间传输结构数据的时候,最好是通过某种约定将结构数据序列化成一串字符串,接收方再通过反序列化将字符串转换成结构数据。以上说的这种约定,其实可以看成是用户层通信的一种协议,是由程序猿自己定的。   实际

    2024年02月02日
    浏览(60)
  • 网络基础2(HTTP,HTTPS,传输层协议详解)

    再谈协议         在之前利用套接字进行通信的时候,我们都是利用 “字符串” 进行流式的发送接收,但是我们平常进行交流通信肯定不能只是简单的发送字符串。         比如我们用QQ进行聊天,我们不仅需要得到对方发送的消息,还要知道对方的昵称,头像等一系列数

    2024年02月13日
    浏览(52)
  • TCP/IP协议、HTTP协议和FTP协议等网络协议简介

    常见的网络协议主要包括TCP/IP协议、HTTP协议、FTP协议等。 TCP/IP协议(Transmission Control Protocol/Internet Protocol)是互联网最基础的协议,由网络层的IP协议和传输层的TCP协议组成。 TCP/IP定义了电子设备如何连入因特网,以及数据如何在它们之间传输的标准,是Internet国际互联网络

    2024年04月10日
    浏览(83)
  • 【网络技术】【Kali Linux】Wireshark嗅探(九)安全HTTP协议(HTTPS协议)

    本次实验是基于之前的实验:Wireshark嗅探(七)(HTTP协议)进行的。本次实验使用Wireshark流量分析工具进行网络嗅探,旨在初步了解安全的HTTP协议(HTTPS协议)的工作原理。 HTTPS的含义是HTTP + SSL,即使用SSL(安全套接字)协议对通信数据进行加密。HTTP和HTTPS协议的区别(用

    2024年01月20日
    浏览(51)
  • 常见网络通信协议(http、https、ws)及安全协议(SSL、TLS、XTLS)

    文章内容删除了一大半不合适的内容,发不出来,你懂得。🥰 HTTP和HTTPS都属于 应用层协议 ,它们都是用于从万维网(WWW)服务器传输超文本到本地浏览器的传送协议。它们都是 基于 TCP/IP 协议 来传递数据的,支持 客户端-服务器模式 的通信。 HTTP和HTTPS的区别主要在于HTT

    2024年02月10日
    浏览(48)
  • 前端面试:【网络协议与性能优化】HTTP/HTTPS、TCP/IP和WebSocket

    嗨,亲爱的Web开发者!在构建现代Web应用时,了解网络协议是优化性能和确保安全性的关键。本文将深入探讨HTTP/HTTPS、TCP/IP和WebSocket这三个网络协议,帮助你理解它们的作用以及如何优化Web应用的性能。 1. HTTP/HTTPS协议: HTTP(超文本传输协议): HTTP是用于在Web上传输数据的

    2024年02月11日
    浏览(48)
  • 常见应用层协议端口号及简介【HTTP80、FTP20(数据连接)21(控制连接)、POP3 110、DNS 53、TFTP文件传输协议 69】、http无状态、http的压缩传输

    目录 一、常见应用层协议 我们先看一下其常用协议的端口号: HTTP(hypertext transfer protocol)超文本传输协议(80) HTTPS(secure hypertext transfer protocol)安全文本传输协议(443) FTP(file transfer protocol)文件传输协议(21) TELNET(terminal NETwork)远程登录(端口号23) SMTP简单邮件

    2023年04月08日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包