尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

2025-2026-1 20231301 《信息安全设计》第八周学习总结
📅 发布时间:2026/6/19 16:56:19

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

相关新闻

  • 2025-2026-1 20231301 《信息安全设计》第七周学习总结
  • 2025-2026-1 20231301 《信息安全设计》第六周学习总结
  • 贼猴 0930 模拟赛 T2 | 计数

最新新闻

  • 长沙黄金回收红黑榜|实体门店中立实测,避坑渠道清晰区分 - 奢侈品回收测评
  • 2026【郑州市】防水补漏怎么选?各区持证商家实地勘测整理 - 防水资讯
  • 2026天津手表回收公司排名前十:禹竞名奢汇回收稳居榜首,正规靠谱不踩坑 - 名奢变现站
  • 2026年6月青岛黄金奢侈品回收TOP7实力榜单|客观实测无拉踩,本地变现首选直接抄作业 - 薛定谔的梨花猫
  • 2026年6月19日海安大灯改装本地走访记:检测、装配和交车复查先核对哪几项 - Ayu8888
  • 天津手表回收避坑指南:实测5家正规门店,哪家更让人放心? - 名奢变现站

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号