首页/新闻资讯/正文详情

基于自签名证书的网络安全应用--在线安全系统页面展示(初级篇)

发布时间:2026/9/23 8:54:48 来源:云帆数科 栏目:资讯中心
基于自签名证书的网络安全应用--在线安全系统页面展示(初级篇)
基于自签名证书的网络安全应用要使用自签名证书实现浏览器与服务端之间的通信本文使用 Python 的 socket 库来创建一个基本的 SSL/TLS 连接。具体实现中需要注意1 无安全加密环境中的HTTP协议可以在服务端业务开启时自行定义端口号 当HTTP 采用SSL/TLS 来建立安全链接时一般是采用默认的443端口2 采用自签名证书时可能会出现证书不可信任提醒以下是一个简单的示例代码演示了如何使用自签名证书进行通信importsocketimportssl# 服务器配置HOSTlocalhost# 服务器主机名或 IP 地址PORT443# 服务器端口号CERT_FILEserver.crt# 服务器证书文件路径KEY_FILEserver.key# 服务器私钥文件路径# 创建 socketserver_socketsocket.socket(socket.AF_INET,socket.SOCK_STREAM)# 绑定服务器地址和端口server_socket.bind((HOST,PORT))# 监听连接server_socket.listen(1)print(等待客户端连接...)# 接受客户端连接client_socket,client_addressserver_socket.accept()print(与客户端建立连接:,client_address)# 加载服务器证书和私钥ssl_contextssl.SSLContext(ssl.PROTOCOL_TLS)ssl_context.load_cert_chain(certfileCERT_FILE,keyfileKEY_FILE)# 创建 SSL/TLS 连接ssl_socketssl_context.wrap_socket(client_socket,server_sideTrue)# 与客户端进行通信whileTrue:datassl_socket.recv(1024)ifnotdata:breakprint(接收到客户端数据:,data.decode())# 进行响应response服务器收到消息: data.decode()ssl_socket.send(response.encode())# 关闭连接ssl_socket.close()server_socket.close()其中HOST: 服务器的主机名或 IP 地址。PORT: 服务器的端口号。CERT_FILE: 服务器的自签名证书文件路径。KEY_FILE: 服务器的私钥文件路径。确保在服务器端正确生成自签名证书并将证书文件和私钥文件的路径指定为参数。在客户端浏览器中手动将自签名证书添加到浏览器的受信任根证书存储中。一、案例应用根据上文的描述我们利用前面文章中介绍的自签名文件生成方法制作了自签名文件具体见博文使用OpenSSL生成自签名证书文件列表如图所示服务端源码import socket serversocket.socket() server.bind((192.168.5.128,8080)) server.listen(5) while True: conn,addrserver.accept() dataconn.recv(1024) print(data) datadata.decode() resdata.split( ) print(res) resres[1] conn.send(bHTTP/1.1 200 ok\r\n\r\n) if res/index: with open(r/mnt/hgfs/share/index1.html,rb) as f: conn.send(f.read()) conn.send(bindex hello) elif res/login: with open(rlogin.html,rb) as f: conn.send(f.read()) conn.send(blogin) conn.send(bhello,no over) else: conn.send(bhello) conn.close()运行该服务端后我们在其他机子上打开浏览器后输入不同的URL可以看到不同的页面展示.但是以上的数据在网络环境中传输是及其不安全的。目前HTTP环境中一个比较好的应用是采用SSL/TLS建立安全链接实现数据的安全通信.基于自签名证书的B/S模式网络安全应用1 修改服务端代码加入SSL/TLS安全模块2 在客户端浏览器中导入自签名证书3 在客户端中导入域名映射根据证书的签名情况二、 修改服务端代码加入SSL/TLS安全模块# HTTPS简易服务端TLSSocket加载自签名证书 import ssl import socket # 1. 创建TLS上下文推荐标准写法替代旧PROTOCOL_TLS context ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) # 加载自签名证书与私钥确保同目录存在 scertificate.crt、sprivate.key context.load_cert_chain(certfilescertificate.crt, keyfilesprivate.key) # 2. 创建原始TCP socket server socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) server.bind((10.0.1.133, 443)) server.listen(5) print(HTTPS(TLS)服务启动监听 10.0.1.133:443等待客户端连接...) while True: try: # 等待新客户端TCP连接 conn, addr server.accept() print(f新客户端连接{addr}) # 包装为SSL socket执行TLS握手 ssl_s context.wrap_socket(conn, server_sideTrue) # 读取浏览器HTTP请求 data ssl_s.recv(1024) if not data: ssl_s.close() continue print(收到请求原始数据, data) data_str data.decode(utf-8) req_parts data_str.split( ) print(请求拆分, req_parts) req_path req_parts[1] # 构造HTTP响应 response_header bHTTP/1.1 200 OK\r\nContent-Type:text/html\r\n\r\n ssl_s.send(response_header) if req_path /index: with open(r/mnt/hgfs/share/index1.html, rb) as f: ssl_s.send(f.read()) ssl_s.send(bpindex hello/p) elif req_path /login: with open(rlogin.html, rb) as f: ssl_s.send(f.read()) ssl_s.send(bplogin hello,no over/p) else: ssl_s.send(bphello/p) ssl_s.close() except ssl.SSLError as e: print(fTLS握手异常{e}) conn.close() except Exception as e: print(f服务异常{e})三、 把服务器端对应的证书文件导入客户端浏览器中(选做要将自签名证书导入到客户端的受信任根证书存储中按照以下步骤进行操作在 Windows 操作系统上方法一将服务器证书.crt 或 .pem 格式复制到客户端计算机上。双击证书文件以打开证书视图。在证书视图中单击 “安装证书” 按钮。在证书导入向导中选择 “将证书存储到计算机”然后单击 “下一步”。选择 “受信任的根证书颁发机构” 作为证书存储位置然后单击 “下一步”。单击 “浏览”选择 “受信任的根证书颁发机构” 存储位置然后单击 “确定”。单击 “下一步” 完成证书导入过程。在安全警告对话框中确认要导入证书然后单击 “是”。在 Windows 操作系统上方法二将服务器证书.crt 或 .pem 格式复制到客户端计算机上如c:\。使用管理员身份打开win中的cmd运行命令certutil -addstore root c:\scertificate.crt其中(c:\scertificate.crt 是签名文件所在的绝对路径根据实际文件所在的情况输入)设置hosts文件添加映射寻找hosts文件所在路径-使用cd进入hosts的路径下-执行notepad hosts在文件末尾添加服务器的ip与域名的映射图1 寻找hosts文件所在路径图2 进入hosts文件的当前路径图3 使用notepad编辑hosts文件打开hosts文件后在文件的末尾添加一条 web 服务器所在IP地址和证书中虚拟主机的映射解决证书中使用的服务器名称与 IP的映射因为是内部环境没有dns转换所以需要用到hosts文件进行域名重定向如 socket 服务所在的主机为192.168.0.108 证书中的cn为cuc.xjx.com 修改后重启电脑则添加的记录为在 Linux ubuntu操作系统上将服务器证书.crt 或 .pem 格式复制到客户端计算机上。打开终端并使用管理员权限执行以下命令cd 切换到服务器证书文件所在的路径下sudo cp scertificate.crt /usr/local/share/ca-certificates/ #scertificate.crt 也可以使用绝对路径将服务器证书复制到 /usr/local/share/ca-certificates/,该目录存放浏览器所连接的各服务器证书 4. 执行以下命令更新证书存储sudo update-ca-certificates5. 更新完成后服务器证书将被添加到系统的受信任根证书存储中。 由于证书对应的服务器域名未在客户端设置的DNS中发布因此在浏览器输入URLxjx.cuc.com时需要客户端自行转换为IP。所以需要在 Ubuntu 上添加主机映射修改 hosts 文件步骤 1. 打开终端在 Ubuntu 上打开终端。 2. 切换到超级用户运行以下命令以切换到超级用户root模式sudo su3. 编辑 hosts 文件运行以下命令来编辑 hosts 文件nano /etc/hosts4. 在 hosts 文件中添加映射在打开的 hosts 文件中在文件的末尾或适当的位置按照以下格式添加主机映射IP 地址 域名例如如果要将 example.com 映射到 IP 地址 192.168.0.100则可以添加以下行192.168.0.100 example.com5. 保存和退出按下Ctrl X键然后输入Y以保存对 hosts 文件的更改。然后按Enter键退出编辑器。刷新 DNS 缓存可选如果已经访问过这些域名则可能需要刷新 DNS 缓存以使新的主机映射生效。刷新 DNS 缓存sudo systemctl restart systemd-resolved测试在启动服务端的前提下打开浏览器进行测试.(URL中的域名必须和证书制作时输入的-subj 中申明的参数一直

相关推荐

Flink Hive 方言 CREATE 语句完全指南:数据库、表、视图、宏与函数
Flink Hive 方言 CREATE 语句完全指南:数据库、表、视图、宏与函数

大数据流处理批处理数据工程 【免费下载链接】flink 项目地址: https://gitcode.com/gh_mirrors/fli/flink 点击查看 免费下载 本指南基于 Apache Flink 的 Hive 方言(Hive Dialect)能力,系统讲解在使用 Hive 语法编写 SQL 时支持… · 2026/9/23 8:54:48

Linux操作系统的基础IO
Linux操作系统的基础IO

目录系统文件IOopen函数0 & 1 & 2文件描述符的分配规则重定向输入重定向输出重定向追加重定向dup2FILE文件系统inode软硬链接软链接硬链接动态库和静态库动静态库的命名方式静态库制作一个库使用库动态库制作一个库使用库系统文件IO open函数 int open(const char *p… · 2026/9/23 8:54:47

Holoscan 与 HSB 传感器桥接模组:打通边缘实时 AI 感知的最后一公里
Holoscan 与 HSB 传感器桥接模组:打通边缘实时 AI 感知的最后一公里

导语医疗内镜、手术导航、工业在线检测、机器人感知 —— 这些场景对 AI 系统的要求早已不是 "能不能跑起来",而是 "能不能稳定、实时、低延迟地跑起来"。NVIDIA Holoscan 平台为这类任务关键型应用提供了全栈式的实时数据流处理能力&#xff0… · 2026/9/23 8:54:41

3个核心逻辑拆解致加西亚的一封信面试必问
3个核心逻辑拆解致加西亚的一封信面试必问

3个核心逻辑拆解致加西亚的一封信面试必问 刚拿到 Offer 的应届生最容易在技术二面卡住,不是因为代码写不出,而是面对面试官抛出的 java.lang.NullPointerException 或者 Python 的… · 2026/9/23 14:33:57

OpenClaw命令行工具实战指南与高效运维技巧
OpenClaw命令行工具实战指南与高效运维技巧

1. OpenClaw工具概述OpenClaw作为一款开源的命令行工具集,主要面向开发者和系统管理员提供高效的自动化操作能力。这个工具包最初由某技术团队在2018年发布,经过多年迭代已经形成了包含文件处理、系统监控、网络调试等六大模块的完整生态。不同于其他命令… · 2026/9/23 14:33:57

MATLAB遗传算法实现多机器人任务分配
MATLAB遗传算法实现多机器人任务分配

简介:本资源是一份面向机器人系统开发工程师与智能优化研究者的MATLAB实践项目,聚焦遗传算法在多机器人任务分配中的建模、实现与性能评估,适用于工业自动化、物流调度及协同侦察等实际场景。压缩包共590个文件,主体为482个MATLAB… · 2026/9/23 14:33:57

千笔论文辅助工具:智能写作与文献管理全解析
千笔论文辅助工具:智能写作与文献管理全解析

1. 工具定位与核心价值解析作为一名经历过研究生阶段的科研工作者,我深知论文写作过程中的痛点:文献管理混乱、格式调整耗时、语言表达不专业、查重降重效率低下。千笔这款工具正是针对这些痛点设计的全流程论文辅助系统,它不同于简单的语法检… · 2026/9/23 14:33:57

C语言五子棋课程设计源码:可编译运行的ANSI C工程实践
C语言五子棋课程设计源码:可编译运行的ANSI C工程实践

简介:本资源是一份面向高校C语言初学者的课程设计实践项目,聚焦五子棋游戏开发,帮助学生通过完整可运行的代码掌握控制流程、二维数组应用、胜负判定算法及基础I/O交互等核心编程能力。压缩包共3个文件(29KB)&#xff… · 2026/9/23 14:33:57

Java图书管理系统:MySQL事务+Swing GUI实战指南
Java图书管理系统:MySQL事务+Swing GUI实战指南

简介:本资源是一套完整的Java课程设计级图书管理系统实现方案,面向计算机专业本科生及Java初学者,解决图书馆基础业务管理需求,涵盖管理员登录、图书增删改查、用户信息管理、借阅归还全流程等核心功能。压缩包共187个文件&#x… · 2026/9/23 14:33:51

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码