基于Python和OpenSSL实现的SSL网络通信

基于Python和OpenSSL实现的SSL网络通信 一,实验内容 安装openSSL 编写一个服务器的程序,服务器端的功能是建立SSL网络服务

本文包含相关资料包-----> 点击直达获取<-------

基于Python和OpenSSL实现的SSL网络通信

一、实验内容

  • 安装openSSL

  • 编写一个服务器的程序,服务器端的功能是建立SSL网络服务,接受客户端的SSL连接,收发SSL消息

  • 编写一个客户端的程序,客户端的功能是通过SSL协议连接服务器,收发SSL消息

  • 生成SSL证书

  • 撰写试验报告,包括了服务器端和客户端运行结果截图,以及生成的SSL证书

二、实验框架

程序分为两部分,客户端和服务器端,我们的目的是利用SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性, 私密性。

服务器认证阶段

  • 客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接

  • 服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息

  • 客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器

  • 服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器

用户认证阶段

在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证。

对于客户端而言 :发送6次100byte的数据,显示客户端发送时长,以及客户端数据的时长,并显示平均时长。

对于服务端而言 :接收客户端的数据,并向客户端发送1000byte的数据,显示服务端收到时间,发送时间,以及平均时间。

三、实验步骤

3.1 生成证书

同理,用openssl程序

openssl req -new -x509 -days 365 -nodes -out cert.pem -keyout key.pem

3.2 Pip openssl库

Pip安装openssl库后

3.3 编写客户端和服务端

  • 对于客户端而言 :发送6次100byte的数据,显示客户端发送时长,以及客户端数据的时长,并显示平均时长

  • 对于服务端而言 :接收客户端的数据,并向客户端发送1000byte的数据,显示服务端收到时间,发送时间,以及平均时间

服务端代码

```python import socket import ssl,time sock=socket.socket() print("建立套接字成功") sock.bind(("127.0.0.1", 443)) print("绑定成功") sock.listen(1) def input_pro(connstream,data): print("接收到的客户端数据长度是",len(data)) return True def doclient(connstream): recvtime=0 sendtime=0 n=0 t1=time.clock() data=connstream.recv(1024) t2=time.clock() print("服务端接收客户端数据的时间",t2-t1) while data: if not input_pro(connstream,data): break n=n+1 t3 = time.clock() connstream.send(b'b' * 1000) t4 = time.clock()

    sendtime += t4 - t3
    print("服务端发送数据时长", t4 - t3)

    t3 = time.clock()
    data = connstream.recv(1024)
    t4 = time.clock()
    recvtime += t4 - t3
    print("服务端接收客户端数据时间", t4 - t3)

print("平均发送时间是",sendtime/n,"平均接收时间是",recvtime/n,)
return True

while True: #接受连接并返回(conn,address), # 其中conn是新的套接字对象, # 可以用来接收和发送数据。 # address是连接客户端的地址。 conn,addr=sock.accept() print("客户端的套接字数据接收到了") connstream=ssl.wrap_socket(conn,"key.pem","cert.pem",server_side=True) try: doclient(connstream) finally: connstream.shutdown(socket.SHUT_RDWR) connstream.close() ```

客户端代码

python import socket, ssl, pprint, time s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) ssl_s=ssl.wrap_socket(s,cert_reqs=ssl.CERT_REQUIRED,ca_certs="cert.pem") ssl_s.connect(("127.0.0.1", 443)) print("套接字连接成功") n=0 sendtime=0 recvtime=0 while n<6: n=n+1 t1=time.clock() ssl_s.send(b'a'*100) t2=time.clock() sendtime+=t2-t1 print("发送时长",t2-t1) t1=time.clock() data=ssl_s.recv(1024) t2=time.clock() recvtime+=t2-t1 print("接收时长",t2-t1) print(len(data)) print("平均接收时间",sendtime/n,"平均发送时间",recvtime/n) print("生成的证书信息") pprint.pprint(ssl_s.getpeercert()) ssl_s.close()

服务器端代码

```python import socket import ssl,time sock=socket.socket() print("建立套接字成功") sock.bind(("127.0.0.1", 443)) print("绑定成功") sock.listen(1) def input_pro(connstream,data): print("接收到的客户端数据长度是",len(data)) return True def doclient(connstream): recvtime=0 sendtime=0 n=0 t1=time.clock() data=connstream.recv(1024) t2=time.clock() print("服务端接收客户端数据的时间",t2-t1) while data: if not input_pro(connstream,data): break n=n+1 t3 = time.clock() connstream.send(b'b' * 1000) t4 = time.clock()

    sendtime += t4 - t3
    print("服务端发送数据时长", t4 - t3)

    t3 = time.clock()
    data = connstream.recv(1024)
    t4 = time.clock()
    recvtime += t4 - t3
    print("服务端接收客户端数据时间", t4 - t3)

print("平均发送时间是",sendtime/n,"平均接收时间是",recvtime/n,)
return True

while True: #接受连接并返回(conn,address), # 其中conn是新的套接字对象, # 可以用来接收和发送数据。 # address是连接客户端的地址。 conn,addr=sock.accept() print("客户端的套接字数据接收到了") connstream=ssl.wrap_socket(conn,"key.pem","cert.pem",server_side=True) try: doclient(connstream) finally: connstream.shutdown(socket.SHUT_RDWR) connstream.close() ```

四、实验结果截图

4.1 客户端运行结果

发送6次100字节的数据,接收服务器1000字节的数据,并显示服务器发来的数据的长度(1000)

证书信息

4.2 服务端运行结果

显示接收到的客户端数据的时间,客户端数据的长度,服务端发送数据的时间以及平均时长

参考文献

  • 基于数据安全通信的分布式入侵防御系统研究(电子科技大学·周峻锋)
  • 基于ASP.NET的网络用户身份认证研究(昆明理工大学·肖亮)
  • 基于微服务架构的敏捷开发平台安全机制的设计与实现(西安电子科技大学·王孝宇)
  • 基于B/S架构的网络层攻击平台设计与实现(西安电子科技大学·杨睿)
  • 基于代理重加密的邮件系统的研究与设计(暨南大学·李应开)
  • 基于B/S架构的网络层攻击平台设计与实现(西安电子科技大学·杨睿)
  • L2TP下的VPN方案及其群信任传递模型的研究(湖南大学·黄浩)
  • 复杂网络环境下基于联盟链的安全通信系统设计与实现(电子科技大学·杜明昭)
  • 基于.NET框架的Web数据库访问技术的研究与实现(武汉理工大学·希凡)
  • 基于J2EE架构第三方SNS合作系统的设计与实现(吉林大学·刘赫文)
  • 基于Kerberos+SSL的企业数据安全传输系统的设计与实现(大连理工大学·王宇)
  • 基于ssl协议的动态口令认证系统在手机通信中的研究与应用(贵州大学·伊浩)
  • 面向SOA架构微服务的安全系统的设计与实现(南京大学·唐文宇)
  • 基于B/S架构的网络层攻击平台设计与实现(西安电子科技大学·杨睿)
  • 基于单点登录的企业级应用集成(山东大学·袁品良)

本文内容包括但不限于文字、数据、图表及超链接等)均来源于该信息及资料的相关主题。发布者:源码客栈 ,原文地址:https://m.bishedaima.com/yuanma/35491.html

相关推荐

  • 基于SpringBoot框架的社区医疗综合服务

    这是一份采用🔥🔥SpringBoot核心框架构建的社区健康服务系统源代码,主要编程语言为Java,并结合了SpringBoot和Vue技术栈,开发工具为Idea或Eclipse
    2024年05月23日
    6 1 3
  • Python程序设计#4作业

    Python程序设计#4作业 作业题目 基于#3作业获取的数据(No_Smoothing,非平滑数据),计算出LOWESS(局部加权回归,fraction取前后各5年的数据)结果
    2024年05月14日
    2 1 1
  • 基于Python制作的乒乓球游戏

    基于 Python 制作的乒乓球游戏 导语 月底了,很惭愧,并没有找到一些想复现的经典游戏的素材文件,所以这个月就搞个简单的小游戏吧,废话不多说
    2024年05月14日
    2 1 1
  • 基于Java+JSP+Servlet+Mysql的停车场管理系统

    在当今社会,随着城市化进程的不断加快,停车场管理系统的重要性日益凸显,基于Java+JSP+Servlet+Mysql技术的停车场管理系统具有很高的实用价值和广泛的应用前景
    2024年05月07日
    10 1 3
  • Python爬虫实战之爬取饿了么信息

    爬取饿了么某地区的外卖信息 闲来无事,爬取大学城周边的饿了么夜晚外卖信息打发时间, 数据生成josn格式的csv文件,生成词云以及食物信息统计图 数据来源平台 :饿了么 地点选择 :新乡大学城(夜晚) 抓取地址 :https://www
    2024年05月14日
    43 1 11
  • java+swing实现推箱子小游戏课程设计源码

    这是一个🔥🔥swing实现推箱子小游戏课程设计源码🔥🔥的项目源码,开发语言Java,开发环境Idea/Eclipse,这个 推箱子游戏开发技术栈为JavaSwing项目
    2024年05月23日
    3 1 1
  • 基于C++开发的WEB服务器

    功能说明 作者初衷是编写一个web框架支持C++开发cgi程序,于是cppweb诞生了, 作者希望cppweb是一个大一统的框架,即可用于传统服务端编程也可用于web编程
    2024年05月14日
    1 1 1
  • 基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统

    基于 SpringBoot + jpa + Erupt 后台框架开发的综合签到打卡系统 一 ,项目背景及需求分析 docker-compose 一键部署 (仅需下载 docker-compose 文件夹运行即可) 用户在可靠验证下实现简化身份确认 在已有用户数据库基础上 传统校验方式: 直接选择 ==》 用户 【不安全/不可靠】 用户名 + 密码 查询数据库 ==》 用户 【麻烦/】 新型校验方式 第三方工具
    2024年05月14日
    22 1 3
  • 医院挂号管理系统设计与实现源代码,ssh框架+mysql

    医院挂号管理系统设计与实现源代码,ssh框架+mysql 医院挂号管理系统在当前社会医疗信息化进程中具有重要意义,随着人口增长和医疗需求的不断增加,传统的挂号方式已经无法满足患者的需求
    2024年05月07日
    8 1 2
  • 房屋租赁系统

    这是一个🔥🔥基于SpringBoot框架的房屋租赁系统设计与实现🔥🔥的项目源码,开发语言Java,框架使用的SpringBoot+vue技术,开发环境Idea/Eclipse
    2024年05月23日
    1 1 1

发表回复

登录后才能评论