当前位置: 首页 > news >正文

SSL/TLS和HTTPS

HTTPS就是用了TLS包装的Socket进行通信的HTTP

混合加密

被称为混合加密。具体过程如下:

使用非对称加密协商对称密钥: 在通信的开始阶段,通常由客户端和服务器使用非对称加密算法(如RSA)来协商一个对称密钥。通常情况下,客户端生成一个随机的对称密钥,然后使用服务器的公钥进行加密,发送给服务器。

对称加密通信: 一旦双方都有了相同的对称密钥,后续的通信可以使用这个对称密钥来进行加密和解密。对称加密算法(如AES)通常比非对称加密算法更高效,因此可以更好地满足大量数据的加密需求。

SSL和TLS

SSL(安全套接字层,Security Socket)和TLS(传输层安全,Transport Layer Security)协议位于网络协议栈中的传输层(Transport Layer)。

SSL虽然在日常对话中仍然经常被提及,但实际上已经被TLS取代。

TLS用在TCP上面,UDP不使用

服务器发送的SSL数字证书需要使用SSL的公钥来进行验证

TLS通常通过在底层的Socket连接上进行包装实现,如下

int main() {int client_socket;struct sockaddr_in server_addr;SSL_CTX *ssl_context;SSL *ssl_connection;// 初始化SSL库SSL_library_init();// 创建SSL上下文ssl_context = SSL_CTX_new(TLS_client_method());// 创建Socket连接client_socket = socket(AF_INET, SOCK_STREAM, 0);// 连接到服务器connect(client_socket, (struct sockaddr *)&server_addr, sizeof(server_addr);// 创建SSL连接对象ssl_connection = SSL_new(ssl_context);SSL_set_fd(ssl_connection, client_socket);// 建立SSL连接SSL_connect(ssl_connection) // 发送数据const char *message = "Hello, TLS!";SSL_write(ssl_connection, message, strlen(message));// 接收数据char buffer[1024];int bytes_received = SSL_read(ssl_connection, buffer, sizeof(buffer));// 关闭SSL连接SSL_shutdown(ssl_connection);SSL_free(ssl_connection);// 关闭Socket连接close(client_socket);// 清理SSL上下文SSL_CTX_free(ssl_context);return 0;
}

TLS过程

TLS(传输层安全)协议的实现过程涉及到多个步骤,包括握手、加密通信、数据传输和连接终止等。

在TLS握手过程中,客户端和服务器首先建立了TCP连接,然后才进行TLS握手。

握手过程在这里插入图片描述

客户端先发送第一随机数
服务器发第二随机数,发送证书(携带其公钥)
客户端验证证书
客户端返回用公钥加密后的预主密钥
此时服务器和客户端都有了第一随机数,第二随机数和预主密钥,生成对称密钥(会话密钥),之后就使用会话密钥。
会话密钥消耗资源少

相关文章:

  • mysql的双机热备
  • Linux “ 软件管理 “
  • SHELL脚本学习(七) 脚本控制
  • 免费学习通刷课(免费高分)Pro版
  • American Social Welfware (1600-1940)
  • oracle的bitmap索引是什么
  • 【Python数据魔术】:揭秘类型奥秘,赋能代码创造
  • 2024前端面试准备-HTMLCSS
  • AnythingLLM 的 Docker 使用
  • mysql (事物)
  • java计算年化利率
  • 智能合约漏洞类型
  • MySQL之查询性能优化(十一)
  • ffmpeg实现视频播放 ----------- Javacv
  • WebGL开发时尚设计系统
  • Android系统模拟器绘制实现概述
  • css选择器
  • css属性的继承、初识值、计算值、当前值、应用值
  • Js基础——数据类型之Null和Undefined
  • Js基础知识(四) - js运行原理与机制
  • PermissionScope Swift4 兼容问题
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • 飞驰在Mesos的涡轮引擎上
  • 缓存与缓冲
  • 每天一个设计模式之命令模式
  • 你真的知道 == 和 equals 的区别吗?
  • 前端攻城师
  • 前端设计模式
  • 容器服务kubernetes弹性伸缩高级用法
  • 如何将自己的网站分享到QQ空间,微信,微博等等
  • 使用 Xcode 的 Target 区分开发和生产环境
  • 我建了一个叫Hello World的项目
  • 线上 python http server profile 实践
  • 新书推荐|Windows黑客编程技术详解
  • 学习笔记DL002:AI、机器学习、表示学习、深度学习,第一次大衰退
  • 移动端解决方案学习记录
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • 选择阿里云数据库HBase版十大理由
  • ​LeetCode解法汇总2304. 网格中的最小路径代价
  • ​TypeScript都不会用,也敢说会前端?
  • ​低代码平台的核心价值与优势
  • ​如何使用QGIS制作三维建筑
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • !! 2.对十份论文和报告中的关于OpenCV和Android NDK开发的总结
  • # AI产品经理的自我修养:既懂用户,更懂技术!
  • #window11设置系统变量#
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (STM32笔记)九、RCC时钟树与时钟 第一部分
  • (windows2012共享文件夹和防火墙设置
  • (ZT)出版业改革:该死的死,该生的生
  • (阿里巴巴 dubbo,有数据库,可执行 )dubbo zookeeper spring demo
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (第30天)二叉树阶段总结
  • (附源码)python房屋租赁管理系统 毕业设计 745613