首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C/C++:我们何时以及为什么需要在TLS客户端-服务器应用程序中调用SSL_do_handshake()?

在TLS客户端-服务器应用程序中,我们需要在何时以及为什么调用SSL_do_handshake()函数?

TLS(Transport Layer Security)是一种加密通信协议,用于在客户端和服务器之间建立安全的通信连接。在TLS握手过程中,客户端和服务器需要进行一系列的交互步骤来协商加密算法、验证身份和建立安全连接。

在TLS客户端-服务器应用程序中,调用SSL_do_handshake()函数是在以下情况下需要的:

  1. 初始握手:在建立TLS连接之前,客户端需要与服务器进行初始握手。在这个阶段,客户端调用SSL_do_handshake()函数来启动握手过程,与服务器进行通信并协商加密算法、验证身份等。
  2. 重新握手:在已建立的TLS连接中,可能需要重新握手来更新加密算法、重新验证身份或更改会话参数。在这种情况下,客户端可以调用SSL_do_handshake()函数来触发重新握手过程。
  3. 非阻塞模式:在某些情况下,TLS连接可能处于非阻塞模式,即在握手过程中不会阻塞应用程序的执行。在这种情况下,客户端可以通过多次调用SSL_do_handshake()函数来逐步完成握手过程,直到握手成功或出现错误。

调用SSL_do_handshake()函数的目的是完成TLS握手过程,建立安全的通信连接。在握手过程中,客户端和服务器会交换证书、协商加密算法、生成会话密钥等。通过调用SSL_do_handshake()函数,应用程序可以确保在与服务器通信之前建立了安全的连接。

推荐的腾讯云相关产品和产品介绍链接地址:

腾讯云SSL证书:https://cloud.tencent.com/product/ssl-certificate 腾讯云云服务器(CVM):https://cloud.tencent.com/product/cvm 腾讯云负载均衡(CLB):https://cloud.tencent.com/product/clb 腾讯云内容分发网络(CDN):https://cloud.tencent.com/product/cdn

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

nginx实现keyless解决方案

风险:一旦服务端的私钥泄露会导致恶意攻击者伪造虚假的服务器客户端通信,通信内容也存在被劫持和解密的风险。...Output-Feedback):输入反馈模式 CTR(CounTeR):计数器模式 GCM(Galois Counter Mode):Galois/计数器模式 填充模式:对当明文长度不为分组长度的整数倍时,需要在最后一个分组填充一些数据使其填满一个分组长度...TLS记录协议位于TLS协议的下层,是负责使用对称密码对消息进行加密通信(对消息压缩、加密以及数据的认证)的部分 TLS握手协议中使用的密码技术 公钥密码:加密预主秘钥用的 单向散列函数:构成伪随机数生成器...,其调用openssl的ssl_do_handshake ngx_int_t ngx_ssl_handshake(ngx_connection_t *c) { ... n = ngx_ssl_handshake_early_data...(c); n = SSL_do_handshake(c->ssl->connection); ... } 调用keyless模块的init函数先是获取coremodule的main conf,然后获取到

1.7K00

截获TLS密钥——Windows Schannel

ALPC调用由加载到lsass.exe的schannel .dll副本处理,然后使用一组加密API (CNG,6,主要在ncrypt.dll和bcrypt.dll实现)来执行各种密钥相关的任务。...因此不需要在内存中保存凭证,windows应用程序也能够使用NTLM或Kerberos身份验证。...目标 我们的目标是在完全控制连接的客户端或服务端上的应用程序和/或操作系统时,使用Wireshark解密SChannel TLS流量。...这是因为基于RSA密钥交换的master key并不是在Diffie - Hellman交换期间计算,而是由客户机生成并发送到服务器,由服务器的公钥来加密(这也是为什么它不是前向安全性——只要有服务器私钥任何时候都能解密...当然,当我们试图从服务器连接获取密钥时,我们会得到Session Hash而不是client random。如果远程服务器支持并愿意使用,这也可用于客户端连接。

3.5K10

https大势已来?看腾讯专家如何在高并发压测中支持https

动手之前,我们调研了https层可用的库,最常见的就是OpenSSL了。像curl也有https的相应支持,不过考虑到要在tcp socket(epoll)这一层实现,还是选择了OpenSSL。...https就是http+tls/ssl(下文简称ssl)。...而下次可读事件发生时,还需要重复调用SSL_write,直到SSL_write成功......是不是有点奇怪,epoll告知我们socket可读了,我们居然要对socket调用写操作.........4 加入半双工开关——重协商考虑 要点3:当SSL_read或SSL_write阻塞时,需要在SSL对象上重复调用该操作直到收发完成 要点3正是我们上面提到的奇葩之处。...如上图: 1)“正常状态”可以认为连接当前是空闲的,不需要收发数据; 2)正常态下有客户端数据要发送,则调用SSL_write接口,如果阻塞,则会进入图左的两个状态; 3)正常态下epoll提示有服务端返回的数据可读

1.2K30

JAVA 异常处理的最佳实践

前言 异常处理的问题之一是知道何时以及如何去使用它。我会讨论一些异常处理的最佳实践,也会总结最近在异常处理上的一些争论。 作为程序员,我们想要写高质量的能够解决问题的代码。...当我问开发人员为什么这么做,他会回答“我知道这样会影响API,但是我之前就这么做的而且效果还不错”。 C++社区花了好久才决定如何使用异常。这场争论也在JAVA社区产生了。...客户端可以在一段时间之后试着重新连接或是记录资源失效日志然后暂停应用程序。 JAVA异常类型 JAVA定义了两种异常: 检查的异常:从 Exception类继承的异常都是检查异常。...C++C#根本没有检查异常。这些语言中所有的异常都是无需检查的。 从低层抛出的检查异常强制要求调用方捕获或是抛出该异常。...如果你调用的API仅仅出发了无需检查异常,你仍然需要在使用后主动清理。使用 try-catch块。

1.6K80

再讲Python不能做游戏后端开发我揍你嗷!​ Twisted——基于事件驱动的Python网络框架

阿巩 在大家知道阿巩做游戏后端开发后最常有的对话是:你转做C++了吗,我说是Python,然后对面意味深长的叹口气,哦~不过Python慢啊;性能不如静态语言;Python适合写写脚本巴拉巴拉……硬了...首先后端包括客户端服务器端,客户端服务器端再分为引擎、基础框架和逻辑层,至于核心引擎那必然得是C++老大哥,不过毕竟老大哥,像是逻辑层这样的繁杂工作Python来做就可以了。...对于服务器,用纯Python实现优势有很多:首先是不停服更新,这保证了服务器稳定运行,游戏线上跑着同时我们修着bug,开发效率大大提升的同时成本和风险也大幅降低,热更上线也不需要用户客户端整包更新;还有对于配置文件...那就是今天和大家分享的Twisted框架,它支持许多常见的传输及应用层协议,包括TCP、UDP、SSL/TLS、HTTP、FTP等,这也意味着能为客户端服务器端提供自定义开发工具。...那么在Twisted中使得程序设计可以采用事件驱动机制得益于Deferred(延迟)对象,它是一个管理回调函数的对象,我们可以向该对象添加需要回调的函数,同时可以指定该组回调函数何时调用

97810

Linkerd最先进的Rust代理|Linkerd2-proxy

为什么我们选择这条冒险的道路,而不是坚持使用Scala,或者一些更“传统”的代理语言,如C++C? 决定使用Rust的原因有几个。...所以我们知道我们需要一种可以编译成原生二进制文件的语言,比如Rust、Go和C++。 现在,谈一谈延迟。我们从Linkerd 1学到的另一个教训。告诉我们选择Rust的是垃圾收集的影响。...这就给我们留下了没有垃圾收集的语言,比如Rust和C++。 最后,是谈安全。确保服务之间的安全和私有通信是服务网格的主要价值支柱。但是,在数据路径插入另一个跳也会向攻击者暴露一个新的攻击面。...与CC++不同,Rust解决了这些问题,但它是在编译时解决的,不会受到垃圾收集的性能影响。换句话说,Rust让我们避开了大量潜在的数据平面漏洞,否则这些漏洞会困扰Linkerd。...“这是TLS客户端Hello message吗?” 如果请求是客户端hello,则查看服务器名称指示(server name indication,SNI)值,该值包含客户端希望终止的服务器的主机名。

2K10

MIT 6.858 计算机系统安全讲义 2014 秋季(三)

为什么证书可能比 Kerberos 更好? 客户端每次连接到新服务器时无需与 KDC 通信。 服务器可以向客户端呈现证书;客户端可以验证签名。 KDC 不参与生成会话密钥。...与 HTTPS/TLS 的同源策略。 TLS 证书名称必须与 URL 的主机名匹配。 在我们的示例,证书名称必须是 www.paypal.com。...假设我们想要计算m = c^d (mod pq)。 可以计算m1 = c^d (mod p),以及m2 = c^d (mod q)。...由于票据授予票据具有已知格式,攻击者可以确定解密何时成功。 在 Kerberos v5 ,票证请求者必须在请求包含{ timestamp }_{K_c},以证明对K_c的了解。...任何单个服务器可能被 compromise,无法信任它。 无法避免信任客户端机器。 为什么我们需要洋葱密钥以及身份密钥? 可能能够保护身份密钥免受长期损害。

14210

Kubernetes上实现Spring Boot SSL热重载

第一个功能允许我们利用 SSL 绑定来配置和使用自定义 SSL 信任材料,既可以在服务器端也可以在客户端使用。...第二个功能使得在 Spring Boot 应用程序的嵌入式 Web 服务器热重载 SSL 证书和密钥变得很容易。让我们看看它在实践是如何工作的!...此外,它必须同时发生在服务器端和客户端,以避免通信中的错误。在服务器端,我们使用嵌入式 Tomcat 服务器。在客户端应用程序我们使用 Spring RestTemplate 对象。...尽管我们启用了 --insecure 选项,但请求失败,因为 Web 服务器需要客户端认证。为了避免这种情况,我们应该在 curl 命令包含密钥和证书文件。...服务器 bundle 用于 web 服务器,与之前的应用示例定义的 bundle 非常相似。客户端 bundle 专门用于 RestTemplate bean。

12410

甩掉TCP协议的HTTP3,真的很牛吗?

我们经常需要在WiFi和4G之间进行切换,比如我们在家里时使用WiFi,出门在路上,切换到4G或5G,到了商场,又连上了商场的WiFi,到了餐厅,又切换到了餐厅的WiFi,所以我们的日常生活需要经常性的切换网络...在应用于其他协议上时,需要注意一些原则,如在选择QUIC协议时根据实际场景和需求,进行适当的配置调整和优化;在使用过程需要加强网络安全防护,保障数据传输的安全性;在网络设备及应用程序的开发和调试过程做相关的技术支持和调试工作...客户端和服务端的网络协议栈如何选型? A5:成本,我们可以分为服务器成本以及研发成本。 研发成本:客户端和服务端都需要支持HTTP/3,甚至中间负载均衡器也需要支持HTTP/3....使用HTTP/3能够减少连接建立的延迟以及减少对服务器资源的消耗,从而加快网页的加载速度。 而对于接口调用,HTTP/1.1在许多场景下仍然可以使用。...HTTP/1.1是目前最广泛支持的HTTP协议,它具有广泛的兼容性和广泛的支持,许多服务器客户端都可以对其进行支持。对于简单的接口调用,HTTP/1.1仍然能够提供足够的性能。

49520

Go语言TLS客户端握手

/tls/handshake_client.go的doFullHandshake()。,在Client 做DH密钥交换之前,先验证服务端证书。主要的函数为在....从这里也就说明了为什么 buffer 只有在需要客户端证书的情况下才不为 nil。...第二:TLS 握手其实是一个 双向认证 的过程,客户端服务器都需要进行摘要认证以及收尾 (发送 Finished 消息,意为后面 HTTP 开始正式加密报文通信了)。...现在我们来看看 TLS1.3 握手具体流程,先放图:图片// 原 DH 握手 -1.浏览器向服务器发送 client_random,TLS 版本和供筛选的加密套件列表。...这两类握手的区别仅在于如何实现秘钥建立和身份验证:秘钥交换身份验证RSA 握手RSARSADH 握手ECDHERSA/DSA我们看到,在版本演进,最新的 TLS1.3 抛弃了 RSA 算法是为了更安全

49940

一文读懂 HTTP1HTTP2HTTP3

HTTP2 的缺陷 TCP 以及 TCP+TLS 建立连接的延时 TCP 的队头阻塞并没有彻底解决 多路复用导致服务器压力上升 多路复用容易 Timeout 建连延时 TCP 连接需要和服务器进行三次握手...可插拔 — 应用程序层面就能实现不同的拥塞控制算法。 一个应用程序的不同连接也能支持配置不同的拥塞控制。...最重要的是,我们可以在内存不足或者上游处理性能出现问题时,通过流量控制来限制传输速率,保障服务可用性。 ?...连接迁移 TCP 是按照 4 要素(客户端 IP、端口, 服务器 IP、端口)确定一个连接的。而 QUIC 则是让客户端生成一个 Connection ID (64 位)来区别不同连接。...另外 github 上面也有 C++版本的 QUIC 实现,利用 Nodejs 的 C++ 模块,前端工程师也可以快速实现一个 node-quic。

1.2K11

构建现代Web应用时究竟是选择传统web应用还是SPA

Web 应用程序以及在 Web 浏览器执行大部分用户界面逻辑的单页应用程序 (SPA),后者主要使用 Web API 与 Web 服务器通信。...里面如是说: 何时应使用传统 Web 应用程序应用程序客户端要求简单,甚至要求只读。 应用程序在不支持 JavaScript 的浏览器工作。...此类应用程序容易构建为基于服务器的传统 Web 应用程序,在 Web 服务器上执行逻辑,并呈现要在浏览器显示的 HTML。...应用程序在不支持 JavaScript 的浏览器工作 如需在有限或不支持 JavaScript 的浏览器工作的 Web 应用程序,则应使用传统的 Web 应用工作流编写(或至少可以回退到此类行为)...(内部或公共)客户端公开 API 如果已提供一个 Web API 供其他客户端使用,则相较于在服务器端窗体复制逻辑,创建一个利用这些 API 的 SPA 实现更加容易。

1.4K30

Rust 能够取代 C 语言吗?

一直以来,C/C++ 的一些基本问题都没能得到解决,比如分段错误、手动内存管理、内存泄漏风险和不可预测的编译器行为。Rust 的诞生就是为了解决这些问题,并提高安全性和性能。...Evrone(一家软件公司)在很多项目中使用了 Rust,我们的工程师们这方面在积累了丰富的经验。在这篇文章我们将分享 Rust 的一些主要特性。...它提供了足够的内存管理能力,同时又足够安全,让它成为操作系统和关键应用程序的开发工具。它的主要缺点是硬件厂商对它支持不够,厂商更喜欢使用 C/C++。...例如,使用 Yew(灵感源自 React 和 Angular)开发客户端,使用 Actix-web(一个高性能框架,支持 WebSockets、TLS 和 HTTP/2.0)开发 Web 服务器。...Rust 的另一个应用——也就是我们的持续集成服务 Vexor。在这个服务,Rust 负责任务的管理和调度以及日志管理,并作为任务隔离执行代理的基础。

2.3K20

新一代传输协议QUIC——HTTP3新在哪儿?

这不仅确保了连接总是经过身份验证和加密,而且使得初始连接建立更快:与所需的两次往返相比,典型的QUIC握手只需要在客户端服务器之间进行一次往返。...一个实现上述功能的NAT 典型的NAT路由器可以使用传统的4元组(源IP地址和端口,以及目的地IP地址和端口)来跟踪通过它们的TCP连接,并且通过观察在网络上传输的TCP SYN、ACK和FIN分组,它们可以检测何时可以建立新的连接以及何时终止该链接...例如,如果客户端通过QUIC流A发送HTTP请求A,并且通过流B发送请求B,则由于网络的数据包重新排序或丢失,可能会发生服务器在请求A之前接收到请求B,以及请求B被编码使得它引用了来自请求A的头,服务器将无法解码它...当服务器发送的响应碰巧大于它接收的请求时,这种攻击非常有效,在这种情况下,我们谈到“放大”。...另一方面,QUIC的握手非常不对称:就像TLS一样,在第一次发送,QUIC服务器通常发送自己的证书链,它可以非常大,而客户端只需要发送几个字节(嵌入到QUIC包TLS ClientHello消息)

1.7K41

终于有人把tcp、http、rpc和grpc总结完整了

微服务最大的特点是,跨进程、跨服务、跨语言之间的调用,使得我们能够像调用本地类、函数一样。当微服务具备该特点,将我们复杂的业务拆分成不同的服务,服务之间在相互调用。这也是微服务为什么火的原因之一。...多语言支持:gRPC支持多种编程语言,包括C++、Java、Python、Go、Ruby等,可以方便地构建跨语言的分布式系统。...多语言支持:gRPC支持多种编程语言,包括C++、Java、Python、Go、Ruby等,可以方便地构建跨语言的分布式系统。...这些特性使得HTTP成为了Web应用程序开发不可或缺的协议之一。...支持多种语言:gRPC支持多种编程语言,包括C++、Java、Python、Go、Ruby等,而传统的RPC框架通常只支持少数几种语言。

3.2K60

HTTP2 的常见问题

您还可以在 Github 的贡献者图中了解谁为规范做出了贡献,以及谁在我们的实现列表参与该项目。 HTTP/2 与 SPDY 有什么关系?...在高版本的 HTTP/2 : 是二进制的,而不是文本的 完全多路复用,而不是有序和阻塞 因此可以使用一个连接进行并行处理 使用头压缩​​来减少开销 允许服务器主动将响应"推送"到客户端缓存...在 HTTP/2 ,只有一个代码路径。 HTTP/2 在 telnet 不可用,但是我们已经有了一些工具支持,例如 Wireshark 插件。 为什么 HTTP/2 需要多路复用?...服务器推送可以通过“推送”它认为客户端需要的响应到其缓存,来避免服务器的这种往返延迟。 但是,“推送”响应不是“神奇的”——如果使用不正确,可能会损害性能。...先前收到过 HTTP “APIs” 在 HTTP/2 具有良好性能等特点这样的反馈,那是因为 API 不需要在设计中考虑诸如请求开销之类的问题。

19130

mbed TLS 简明教程(二)

示例客户端  让我们假设有一个简单的网络客户端,试图打开一个到HTTP服务器的连接并读取默认页面.应用程序如下: #include #include <sys/socket.h...mbedtls_ctr_drbg_seed returned %d\n", ret ); goto exit; } SSL 连接 在通用的TCP/IP客户端应用程序,应用程序处理socket(...)和connect()调用.mbed TLS通常在网络层(net.c)内抽象出来,因此下面代码被简化了....拆除(Teardown) 在应用程序的出口处,我们应该干净的关闭SSL/TLS连接,并且还应该销毁任何与SSL/TLS相关的信息,最后,我们释放分配的资源....mbed TLS库,现在我们有了一个可以将基本HTTPS发送到Web服务器应用程序.最终的代码在库的源码以ssl_client1.c的形式提供或参见ssl_client1.c on github.

6.6K50

HTTP探索之路 - HTTP 1 HTTP 2 QUIC

演示地址:    https://http2.akamai.com/demo         1.4 HTTP2 的缺陷 TCP 以及 TCP+TLS 建立连接的延时 TCP 的队头阻塞并没有彻底解决...可插拔 — 应用程序层面就能实现不同的拥塞控制算法。 一个应用程序的不同连接也能支持配置不同的拥塞控制。...而 TCP 重传策略存在二义性,比如客户端发送了一个请求,一个 RTO 后发起重传,而实际上服务器收到了第一次请求,并且响应已经在路上了,当客户端收到响应后,得出的 RTT 将会比真实 RTT 要小。...2.2.5 连接迁移 TCP 是按照 4 要素(客户端IP、端口, 服务器IP、端口) 确定一个连接的。而 QUIC 则是让客户端生成一个 Connection ID (64位)来区别不同连接。...另外 GitHub 上面也有 C++版本 的 QUIC 实现,利用 Nodejs 的 C++ 模块,前端工程师也可以快速实现一个 node-quic。

67810

NATS多种连接Golang实践

此事件对于发送大量消息的应用程序尤为重要。 // 异步调用连接事件处理程序 //并且连接状态可能已经改变 // /调用回调。...您正在使用的库可能包含的功能之一是能够在连接断开时缓冲传出消息。 在短暂的重新连接期间,这些客户端可以允许应用程序发布由于服务器脱机而将缓存在客户端的消息。然后,库将在重新连接时发送这些消息。...客户端无法控制访问控制,但客户端确实提供了对系统进行身份验证,绑定到帐户以及要求TLS所需的配置。...,但TLS可用于检查服务器的身份以及可选的客户端身份,并将加密两者之间的所有流量。...从应用程序的角度来看,连接到不验证客户端证书的服务器可能看起来相同。在幕后,禁用TLS验证会删除服务器端对客户端证书的检查。在TLS模式下启动时,nats-server将要求所有客户端TLS连接。

3.9K20
领券