openssl 代码分析--- SSL_connect .

OpenSSL之SSL_connect函数分析 本系列OpenSSL使用的代码版本为:1.0.2o。 前言 本篇文章纯属个人学习的一点经验分享,若有不对之处烦请各位大神现身指点,希望能和大家一起共同进步。 一、SSL_connect是什么? SSL_connect函数是ssl客户端发起ssl连接的一个函数,函数原型:int SSL_connect(SSL *ssl)。这个函数的调用实现了ssl密钥协商的所有流程,从client_hello开始到最后的密钥协商结束。 二、代码分析 首先我们来看看SSL_connect的实现: int SSL 阅读详情

SSL_connect函数会负责完成ssl handshake过程,那么我们来看看他是怎么实现的。

SSL_connect函数本身的code非常简单,只有短短几行,但是最后通过函数指针调用来实现它的功能。这个函数指针是s->method->ssl_connect,此处method即为之前介绍的初始化到SSL_Ctx中的method。我们就看看常用的SSLv3的method, SSLv3_client_method。在SSLv3_client_method里面,首先会将method初始化为一个base的ssl v3 method,里面定义了一组ssl v3会用到的函数指针,然后将ssl_connect定义为ssl3_connect。 所以之前SSL_connect最终要调用的函数指针即为ssl3_connect。

然后我们进入ssl3_connect中看看到底是如何实现。

这个函数很长,但是基本结构也很清晰,首先是一些基本的初始化操作,然后就是一个for循环,且没有循环变量,也就是这个循环自己不会结束,需要通过循环体内达到某种状态自己结束,我想肯定是ssl handshake成功或是失败之后就会跳出这个循环的。

在这个for循环中,核心的又是一个大大的switch语句,根据当前ssl的state进入不同的处理逻辑,那么这显然就是ssl client的handshake 状态处理机了。

下面就是ssl client的状态机,可以对照之前的ssl handshake图。

SSL Client

openssl客户端编程:一个不起眼的函数导致的SSL会话失败问题 我们目前大部分使用的openssl库还是基于TLS1.2协议的1.0.2版本系列,如果要支持更高的TLS1.3协议,就必须使用openssl的1.1.1版本或3.0版本。升级openssl库有可能会导致SSL会话失败,我在升级 wincurl 时,意外的收获了一个函数。这个函数非常的不起眼,但具有的现实意义却很大。 大部分情况下如果你不调用该函数,并不影响SSL会话和通信,但有时会被某些服务器拒绝。一旦被拒绝,查找具体的原因将变得非常痛苦。这个函数的意义好比HTTP协议中HOST字段,它和NGINX反向代理 阅读详情

相关推荐

openssl TLS 单向认证

执行 TLS/SSL 握手”涉及一系列复杂的消息交换和加密操作,以确保双方能够在一个安全的、加密的通道上进行通信。在握手期间,双方会验证彼此的身份,协商加密方式,并生成用于加密通信的对称密钥。服务器:SSL_accept(ssl):服务器通过此函数接受客户端的握手请求,并返回服务器的证书和其他必要信息,最终完成握手。发送服务器问候消息(ServerHello):服务器将选定的加密套件、自己的随机数、证书等信息发送给客户端。发送证书:服务器会将自己的公钥证书发送给客户端,以便客户端验证服务器的身份。

wc_12345654321的博客 1431

【项目问题解决】OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to git.xxxx.com:443

Git报错:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to。

qq_43238568的博客 7555

成功解决:curl: (35) OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to bit.ly:443

执行以下指令下载Fabric二进制及docker镜像时出现标题所指的报错内容 curl -sSL https://bit.ly/2ysbOFE | bash -s -- 2.2.0 1.4.8 -s 1.查看docker镜像源 docker info|grep Mirrors -A 1 2.修改docker镜像源 vim /etc/docker/daemon.json { "registry-mirrors":["https://registry.docker-cn.com"] } 按I插入,插

GniLAY1022的博客 6万+

openssl 代码分析(6) SSL_connect

SSL_connect函数会负责完成ssl handshake过程,那么我们来看看他是怎么实现的。 SSL_connect函数本身的code非常简单,只有短短几行,但是最后通过函数指针调用来实现它的功能。这个函数指针是s->method->ssl_connect,此处method即为之前介绍的初始化到SSL_Ctx中的method。我们就看看常用的SSLv3的method, SSLv3_client_method。在SSLv3_client_method里面,首先会将method初始化为一个base的ss

hudaiqian的专栏 1万+

19、openssl s_client -connect原理及详解及输出说明

TCP 连接建立s_client首先通过TCP协议与目标服务器的指定端口建立基础连接(如 HTTPS 的 443 端口),这一步与普通 TCP 客户端行为一致。SSL/TLS 握手:TCP 连接建立后,s_client发起 SSL/TLS 握手流程,具体步骤如下(以 TLS 1.2 为例):客户端 hello:客户端发送支持的协议版本(如 TLS 1.2)、加密套件列表(如)、随机数、会话 ID 等信息。服务器 hello。

xuebo1129927648的博客 1509

腾讯云服务器安装Docker避坑指南:解决curl (35) OpenSSL SSL_connect错误

本文针对在腾讯云服务器上安装Docker时常见的curl (35) OpenSSL SSL_connect错误,提供了系统性的解决方案。文章详细解析了错误根源,并首选推荐通过配置清华大学等国内镜像源来彻底解决网络问题,确保Docker安装过程顺畅。此外,还介绍了安装后的镜像加速配置、数据目录迁移等深度优化步骤,以及网络诊断、离线安装等终极排查方案,帮助用户从部署到使用实现全链路优化。

weixin_28454475的博客 1329

Openssl SSL_connect()报错定位

背景: 在Openharmony设备上通过openssl和云端通信,SSL_connect报错,返回值-1. 定位: 1、排除header参数问题,把所有参数值打印出来。 2、执行SSL_get_error,打印SSL报错信息,列出所有可能 打印出SSL_ERROR_SSL,上网搜了下,可能是server、client端没定义,尝试在ssl_connect前插入ssl_set_connect_state,标识是客户端,没起作用。也可能是CA证书校验相关问题。 3、尝试调用ERR_ge

zhe184323的博客 4849

利用OpenSSL实现非阻塞通讯C++代码

可以转载,转载请注明出处,谢谢! 关于OpenSSL的原理以及OpenSSL如何安装、使用、测试demo请参看我之前的两篇博文。 这篇博文主要实现了如何在win64下基于VS2012实现OpenSSL的非阻塞通讯。参考了以下几篇博文的内容,表示感谢: https://blog.csdn.net/fly2010love/article/details/46470033 https://www...

zz420521的博客 7653

OPENSSL关键数据结构之一:SSL

     SSL作为OPENSSL一个关键数据结构一点都不过分,无论是在SSL初始化连接,还是在读写数据,SSL数据结构都起着重要作用。SSL这个数据结构将SSL协议复杂的连接过程都封装在内部,提供一个简单的接口让用户调用,就象调用WINSOCK的连接函数一样简单。掌握OPENSSL,了解SSL内部结构非常必要。     SSL的数据结构struct ssl_st    {    /* proto

w9521423的博客 1万+

OpenSSL之SSL_connect函数深度解析:从握手流程到状态机实现

本文深入解析了OpenSSL库中的SSL_connect函数,详细介绍了其从握手流程到状态机实现的完整过程。通过分析核心代码和状态转换,揭示了TLS握手协议的内部工作机制,并提供了性能优化和安全实践建议,帮助开发者更好地理解和应用SSL/TLS安全连接技术。

weixin_30876945的博客 193

OpenSSL编写SSL,TLS程序

一、简介:SSL(Secure Socket Layer)是netscape公司提出的主要用于web的安全通信标准,分为2.0版和3.0版.TLS(Transport Layer Security)是IETF的TLS 工作组在SSL3.0基础之上提出的安全通信标准,目前版本是1.0,即RFC2246.SSL/TLS提供的安全机制可以保证应用层数据在互联网络传输不 被监听,伪造和窜改.openssl...

yolo模型训练找我,AI游戏合作找我 2067

openssl移植 发送ssl邮件 SSL_connect() 返回-1

交叉编译 CC=arm-mol-linux-uclibcgnueabihf-gcc ./config no-asm shared --prefix=$PWD/_install vi Makefile 删除-m64 make; make install 如果出现一下错误 ./libcrypto.so: undefined reference to `getcontext' ./libcrypto.so: undefined reference to `setcontext' ./libcrypto.

zzb2017的博客 1874

fatal: unable to access ‘https://github.com/xxx.git/‘ OpenSSL SSL_connect: SSL_ERROR_SYSCALL 解决方案

 本文主要介绍了fatal: unable to access ‘https://github.com/xxx.git/’: OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443解决方案,希望能对使用git的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 24万+

OpenSSL SSL_connect: Connection was reset in connection to github.com:443

git clone 下载时报错:OpenSSL SSL_connect: Connection was reset in connection to github.com:443 解决:git config --global http.sslVerify false

我的博客 3万+

安装cartographer,跑官网数据集

今天开始写一个关于google cartographer系列文章。此类文章网上已经很多,本系列文章主要记录重点部分及容易踩坑地方。 cartographer是一个完整的激光SLAM开源项目,属于graph slam,包含了完整的前端里程计和后端地图优化,既能够同时定位建图,又能够基于先验地图进行独立全局定位。 值得 目录 一、推荐首选看官网资料,已经很详细了 二、安装 三、源码文件架构 四、跑数据集 1、建图 2、基于先验地图的全局定位 一、推荐首选看官网资料,已经很详细了 原生版:

qq_18276949的博客 6144

3D Slicer肺部CT病灶体积测量:阈值法实操全流程

在医学影像分析中,病灶体积的精准测量是肿瘤评估、疗效随访和科研统计的重要基础。传统逐层手动勾画不仅耗时,且主观差异大,而基于CT值的阈值分割技术,通过设定灰度区间自动提取目标体素,能够快速生成三维分割结果,具有高效、可重复、边界标准统一的优势,尤其适用于肺部实性结节这类与周围肺实质对比度高的病灶。理解体素与CT值的关系,掌握阈值范围的设定逻辑,并配合连通域分析、边缘修正等工程化操作,即可在3D Slicer中稳定获得可靠的体积数据。本文从技术原理出发,系统梳理了DICOM导入、窗宽窗位调节、阈值选择、三维重

weixin_29050271的博客 251

github 443 错误 OpenSSL SSL_connect: SSL_ERROR_SYSCALL 或者LibreSSL 终极解决办法

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 LibreSSL SSL_connect: SSL_ERROR_SYSCALL in connection to bitbucket.org:443 终极解决方案 step1: 检查是否开了网络代理,如果有先关闭; step2:在命令行输入如下命令 git config --global http.sslVerifyfalse $ git config --

admin_jalen的博客 1万+

EduCoder 计算机网络实验 IP协议分析

第1关:跟踪抓包 任务描述 相关知识 IPV4数据包 截获数据报 分析截获结果 使用git将本地文件推送到远程仓库永久保存 操作要求 任务描述 本关任务:使用 Ping 命令发送数据报,用 Wireshark 截获数据报,分析 IP 数据报的格式,理解 IPV4 地址的编址方法,加深对 IP 协议的理解。 相关知识 为了完成本关任务,你需要掌握: 截获数据报; 简单分析数据包格式。 IPV4数据包 网际协议第 4 版(Internet Protocol version 4

qq_41975868的博客 1万+

OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443

解决:OpenSSL SSL_connect: SSL_ERROR_SYSCALL in connection to github.com:443 第一种情况:网络问题 出现上述问题后,我发现在浏览器上登录github都不能登录,经过查阅发现是网络问题。电脑此刻是自动获取IP,将IP从新设置一个后,在拉取代码,成功解决! 第二种情况:代理问题 ...

黄雄进的博客 4万+

独立游戏开发者的新武器:实测腾讯混元3D自动绑骨,搭配Mixamo让角色动画制作效率翻倍

本文实测腾讯混元3D自动绑骨功能与Mixamo动画库的协同使用,显著提升独立游戏开发者的角色动画制作效率。通过解决卡通角色绑骨偏差、优化骨骼权重及动画状态机配置,使原本两周的流程缩短至三天,并分享Unity中的性能优化与版权合规要点。

weixin_42662605的博客 490

强化学习——day16 动态规划算法

动态规划(dynamic programming)是程序设计算法中非常重要的内容,能够高效解决一些经典问题,例如背包问题和最短路径规划。动态规划的基本思想是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到目标问题的解。动态规划会保存已解决的子问题的答案,在求解目标问题的过程中,需要这些子问题答案时就可以直接利用,避免重复计算。本章介绍如何用动态规划的思想来求解在马尔可夫决策过程中的最优策略

想太多的学习日志 1550

解决报错curl: (35) OpenSSL SSL_connect: 连接被对方重设 in connection to download.docker.com:443

运行命令报错curl: (35) OpenSSL SSL_connect: 连接被对方重设 in connection to download.docker.com:443。

快乐修勾的博客 2万+

有源滤波电路设计

目录一、低通滤波器1、同相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(压控电压源;Sallen-Key)2、反相输入低通滤波器(1)一阶低通滤波电路(2)二阶低通滤波电路(无限增益多路反馈)二、高通滤波器1、同相输入高通滤波器(1)一阶高通滤波电路(2)二阶高通滤波电路(压控电压源;Sallen-Key)2、反相输入高通滤波电路(1)二阶高通滤波电路(无限增益多路反馈) 一、低通滤波器 1、同相输入低通滤波器 (1)一阶低通滤波电路 即在一阶无源低通滤波器的基础上,加了一个集成运放。 它的

qq_41873236的博客 3万+
上一篇: openssl代码分析--- ssl库 .
下一篇: 网络数据包发送和接受原理
小Mac
博客等级 码龄15年 6粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值