2025-2026-1 20231301 《信息安全设计》第八周学习总结

news/2025/9/30 21:32:32/文章来源:https://www.cnblogs.com/twilight0966/p/19121811

View Post

2025-2026-1 20231301 《信息安全设计》第八周学习总结

2025-2026-1 20231301 《信息安全设计》第八周学习总结

目录
  • 作业信息
  • 学习内容总结
    • 一、TLS协议深度解析
    • 二、OpenSSL SSL/TLS编程实战
    • 三、OpenSSL命令行TLS工具

作业信息

作业 链接
作业课程 <班级>(2025-2026-1 信息安全设计)
作业要求 <作业>(2025-2026-1 信息安全设计 预习作业要求)
作业目标 《Windows C/C++ 加密解密实战》> 预习第十二章
作业正文 <博客>(第八周学习总结)

学习内容总结

第十二章:SSL-TLS编程

一、TLS协议深度解析

1. TLS 1.2握手协议详细流程

sequenceDiagramparticipant Clientparticipant ServerNote over Client,Server: 完整握手流程Client->>Server: ClientHelloNote left of Client: 版本、随机数<br/>密码套件<br/>压缩方法<br/>扩展Server->>Client: ServerHelloNote right of Server: 版本、随机数<br/>选择的密码套件<br/>压缩方法Server->>Client: CertificateNote right of Server: 服务器证书链Server->>Client: ServerKeyExchangeNote right of Server: 密钥交换参数<br/>(如DH参数)Server->>Client: ServerHelloDoneClient->>Server: ClientKeyExchangeNote left of Client: 预主密钥<br/>(用服务器公钥加密)Client->>Server: ChangeCipherSpecNote left of Client: 切换至加密通信Client->>Server: FinishedNote left of Client: 加密的验证数据Server->>Client: ChangeCipherSpecNote right of Server: 切换至加密通信Server->>Client: FinishedNote right of Server: 加密的验证数据Note over Client,Server: 应用数据加密传输开始

二、OpenSSL SSL/TLS编程实战

1. 完整的TLS服务器实现

#include <openssl/ssl.h>
#include <openssl/err.h>
#include <openssl/bio.h>// 初始化OpenSSL
void init_openssl() {SSL_load_error_strings();OpenSSL_add_ssl_algorithms();
}// 清理OpenSSL
void cleanup_openssl() {EVP_cleanup();
}// 创建SSL上下文
SSL_CTX* create_ssl_context(const char* cert_file, const char* key_file) {const SSL_METHOD* method = TLS_server_method();SSL_CTX* ctx = SSL_CTX_new(method);if (!ctx) {ERR_print_errors_fp(stderr);return NULL;}// 设置证书和私钥if (SSL_CTX_use_certificate_file(ctx, cert_file, SSL_FILETYPE_PEM) <= 0) {ERR_print_errors_fp(stderr);SSL_CTX_free(ctx);return NULL;}if (SSL_CTX_use_PrivateKey_file(ctx, key_file, SSL_FILETYPE_PEM) <= 0) {ERR_print_errors_fp(stderr);SSL_CTX_free(ctx);return NULL;}// 验证私钥与证书匹配if (!SSL_CTX_check_private_key(ctx)) {fprintf(stderr, "证书和私钥不匹配\n");SSL_CTX_free(ctx);return NULL;}// 配置安全选项SSL_CTX_set_options(ctx, SSL_OP_NO_SSLv2 | SSL_OP_NO_SSLv3 | SSL_OP_NO_COMPRESSION);SSL_CTX_set_cipher_list(ctx, "HIGH:!aNULL:!MD5:!RC4");return ctx;
}// TLS服务器主循环
void run_tls_server(SSL_CTX* ctx, int server_fd) {struct sockaddr_in client_addr;socklen_t client_len = sizeof(client_addr);while (1) {int client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len);if (client_fd < 0) {perror("accept failed");continue;}// 创建SSL对象SSL* ssl = SSL_new(ctx);SSL_set_fd(ssl, client_fd);// 执行TLS握手if (SSL_accept(ssl) <= 0) {ERR_print_errors_fp(stderr);} else {handle_tls_client(ssl);}SSL_shutdown(ssl);SSL_free(ssl);close(client_fd);}
}// 处理TLS客户端连接
void handle_tls_client(SSL* ssl) {char buffer[1024];int bytes;// 读取客户端数据bytes = SSL_read(ssl, buffer, sizeof(buffer) - 1);if (bytes > 0) {buffer[bytes] = '\0';printf("收到客户端消息: %s\n", buffer);// 发送响应const char* response = "Hello from TLS Server!";SSL_write(ssl, response, strlen(response));}
}

2. 完整的TLS客户端实现

// TLS客户端连接函数
SSL* connect_tls_client(const char* hostname, int port, SSL_CTX* ctx) {// 创建TCP连接int sockfd = socket(AF_INET, SOCK_STREAM, 0);if (sockfd < 0) {perror("socket creation failed");return NULL;}struct hostent* host = gethostbyname(hostname);if (!host) {fprintf(stderr, "无法解析主机名: %s\n", hostname);close(sockfd);return NULL;}struct sockaddr_in addr;memset(&addr, 0, sizeof(addr));addr.sin_family = AF_INET;addr.sin_port = htons(port);addr.sin_addr = *((struct in_addr*)host->h_addr);if (connect(sockfd, (struct sockaddr*)&addr, sizeof(addr)) < 0) {perror("connect failed");close(sockfd);return NULL;}// 创建SSL对象SSL* ssl = SSL_new(ctx);SSL_set_fd(ssl, sockfd);// 设置SNI扩展SSL_set_tlsext_host_name(ssl, hostname);// 执行TLS握手if (SSL_connect(ssl) <= 0) {ERR_print_errors_fp(stderr);SSL_free(ssl);close(sockfd);return NULL;}printf("TLS连接建立成功\n");printf("使用的协议: %s\n", SSL_get_version(ssl));printf("使用的密码套件: %s\n", SSL_get_cipher(ssl));// 验证服务器证书if (verify_server_certificate(ssl, hostname) != 0) {printf("服务器证书验证失败\n");SSL_shutdown(ssl);SSL_free(ssl);close(sockfd);return NULL;}return ssl;
}// 验证服务器证书
int verify_server_certificate(SSL* ssl, const char* hostname) {X509* cert = SSL_get_peer_certificate(ssl);if (!cert) {fprintf(stderr, "未收到服务器证书\n");return -1;}// 检查证书基本有效性if (SSL_get_verify_result(ssl) != X509_V_OK) {fprintf(stderr, "证书验证失败\n");X509_free(cert);return -1;}// 检查主机名匹配if (X509_check_host(cert, hostname, strlen(hostname), 0, NULL) != 1) {fprintf(stderr, "证书主机名不匹配\n");X509_free(cert);return -1;}printf("服务器证书验证成功\n");// 显示证书信息print_certificate_info(cert);X509_free(cert);return 0;
}

三、OpenSSL命令行TLS工具

1. 测试TLS连接

# 测试TLS服务器
openssl s_client -connect example.com:443 -servername example.com# 详细调试信息
openssl s_client -connect example.com:443 -debug -state -tlsextdebug# 验证证书链
openssl s_client -connect example.com:443 -showcerts -verify_return_error# 测试特定密码套件
openssl s_client -connect example.com:443 -cipher 'ECDHE-RSA-AES128-GCM-SHA256'

2. 分析TLS连接信息

# 检查支持的密码套件
nmap --script ssl-enum-ciphers -p 443 example.com# 检查TLS协议版本支持
openssl s_client -connect example.com:443 -tls1_2
openssl s_client -connect example.com:443 -tls1_3# 检查证书详细信息
openssl s_client -connect example.com:443 2>/dev/null | openssl x509 -noout -text

截屏2025-09-30 下午9.30

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/923275.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

太月星网站建设程序开发一键生成微信小程序

你知道吗&#xff0c;C类是编程世界中的一种强大工具&#xff0c;它可以帮助我们更好地组织和管理代码。接下来&#xff0c;我将为你呈现一篇近万字的C类的教程&#xff0c;希望能帮助你熟悉这个概念。 首先&#xff0c;让我们从C类的定义开始。类是一个模板&#xff0c;它描述…

2025-2026-1 20231301 《信息安全设计》第七周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第七周学习总结2025-2026-1 20231301 《信息安全设计》第七周学习总结 目录作业信息学习内容总结第十章:身份认证和PKI理论基础一、PKI体系架构深度解析二、证书处理实…

springboot+vue心理健康服务小程序(源码+文档+调试+基础修改+答疑) - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

肉山谷英雄传说新手任务登录英文网站怎么做装修网站建设网

文章目录 前言UUID 处理的更改正则表达式的更改结束 前言 Android 14 已经出来好久好久了… 今天其他的暂且不论&#xff0c;单纯的讲一下 OpenJDK 17 更新的两点变更&#xff08;扒源代码&#xff09;~ 对正则表达式的更改UUID 处理 首先&#xff0c;正则表达式的更改&…

网站备案查询 工信部wordpress 删除标签页

导语 如果之前的单机版hadoop环境安装满足不了你&#xff0c;集群版hadoop一定合你胃口&#xff0c;轻松入手。目录 集群规划前置条件配置免密登录 3.1 生成密匙 3.2 免密登录 3.3 验证免密登录集群搭建 4.1 下载并解压 4.2 配置环境变量 4.4 修改配置 4.4 分发程序 4.5 初始化…

湛江企业自助建站时尚网站设计案例

1. 模型旋转角度尽量取整数&#xff0c;保证线条不会出现锯齿 2. 修改反锯齿模型为FXAA方式&#xff0c;默认的TemporalAA方式会闪烁 3. 动态更新的纹理尺寸一般都不会是2的N次方&#xff0c;比如401X518。 解决方案是 动态更新一张1024x1024的贴图的其中401X518&#xff0c;…

南宁网站建设招聘建设工程合同备案在什么网站上

2016只剩下不到百分之一的时间了&#xff0c;网上陆续看到各种企业或个人的总结或盘点&#xff0c;公司也必须规定每个员工要做年度工作总结&#xff0c;或许是环境释然&#xff0c;心里也有无数次要做总结的念头&#xff0c;尤其是月末年末这种感觉更重&#xff0c;但却没静下…

没用的博客园页面的要素介绍(待更新)

1. 关于那几行字点击查看"<b style=color:rgb(119, 248, 255)>又是一年雨季</b>","<b style=color:rgb(119, 248, 255)>青苔悄悄爬满缝隙</b>","<b style=color:…

详细介绍:Music Tag Web 怎么安装 ffmpeg?

详细介绍:Music Tag Web 怎么安装 ffmpeg?pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", &quo…

2025-2026-1 20231301 《信息安全设计》第六周学习总结

View Post2025-2026-1 20231301 《信息安全设计》第六周学习总结2025-2026-1 20231301 《信息安全设计》第六周学习总结 目录作业信息学习内容总结一、Windows密码体系架构深度解析二、CryptoAPI核心编程实战三、CSP服…

作业-1

实验任务一task1-1#include<stdio.h> #include<stdlib.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");printf(" O \n");printf("…

MacOS拉取git代码报.DS_Store 冲突修复

命令到冲突的文件夹下 1、先查看当前目录下面是否有.DS_Store 这个文件ls -a2、如果存在则继续运行git rm -r --cached .DS_Store

国家住房和城乡建设部官方网站下载百度官方网站

什么是&#xff1f;为什么&#xff1f;需要负载均衡 一个网站在创建初期&#xff0c;一般来说都是只有一台服务器对用户提供服务 ​ 从图里可以看出&#xff0c;用户经过互联网直接连接了后端服务器&#xff0c;如果这台服务器什么时候突然 GG 了&#xff0c;用户将无法访问这…

自己有网站怎么做点卡?商业网点建设中心网站

720云全景漫游制作工具自2014年8月上线后&#xff0c;为数十万创作者提供全景图片&全景视频&高清矩阵上传、编辑、分享一站式软件服务&#xff0c;获得众多创作者的青睐与认可&#xff0c;同时也承载了创作者越来越多的期望&#xff0c;为了给大家提供更灵活多样的功能…

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结

完整教程:Coze源码分析-资源库-删除数据库-前端源码-核心API/总结pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "…

完整教程:Java核心 之JVM

完整教程:Java核心 之JVM2025-09-30 21:13 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; f…

如何查询网站备案信息查询如何注册公司营业执照

使用rm -rf命令转载于:https://www.cnblogs.com/dyh-air/p/7726611.html

如何查询网站的注册信息黄骗免费网站

文章目录 1.计算机网络的功能:2.计算机网络的分类:3.主机间的通信方式:4.电报交换、报文交换、分组交换的区别:5.计算机网络的性能指标:6.0SI模型和TCP/IP模型:7.通信信通的方式:8.端到端的通信与点到点通信的区别:9.同步通信和异步通信:10.频分复用、时分复用、波分复用和码分…

9.30 闲话

never be back,but i am back于是我越来越念旧 czh: 不出意外的话,这应该是我的最后一舞了,之后 OI 可能就只是当做消遣了。已经初四,感觉继续冲 OI 希望已经不大,更何况在强省,又何况同校的同级的也比我强很多。…

哈尔滨建站模板搭建中铁建设登录入口

在.NET Core中实现Docker一键部署&#xff0c;通常涉及以下几个步骤&#xff1a;编写Dockerfile以定义镜像构建过程、构建Docker镜像、运行Docker容器&#xff0c;以及&#xff08;可选地&#xff09;使用自动化工具如Docker Compose或CI/CD工具进行一键部署。以下是一个详细的…