python+openssl实验

第二部分:python+openssl实验报告 一,实验内容 1,安装openSSL 2,编写一个服务器的程序,服务器端的功能是建立SSL网络服务

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

第二部分:python+openssl实验报告

一、实验内容

1.安装openSSL

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

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

4.生成SSL证书。

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

二、实验框架

程序分为两部分,客户端和服务器端,我们的目的是利用SSL/TLS的特性保证通信双方能够互相验证对方身份(真实性),并保证数据的完整性, 私密性。服务器认证阶段:1)客户端向服务器发送一个开始信息“Hello”以便开始一个新的会话连接;2)服务器根据客户的信息确定是否需要生成新的主密钥,如需要则服务器在响应客户的“Hello”信息时将包含生成主密钥所需的信息;3)客户根据收到的服务器响应信息,产生一个主密钥,并用服务器的公开密钥加密后传给服务器;4)服务器恢复该主密钥,并返回给客户一个用主密钥认证的信息,以此让客户认证服务器。用户认证阶段:在此之前,服务器已经通过了客户认证,这一阶段主要完成对客户的认证。经认证的服务器发送一个提问给客户,客户则返回(数字)签名后的提问和其公开密钥,从而向服务器提供认证

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

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

三、实验步骤

​ (1)生成证书

同理,用openssl程序

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

(2)Pip openssl库

Pip安装openssl库后。

(3)编写客户端和服务端

代码基本和c++类似,框架以及概括了基本代码,代码截图如下:

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

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

客户端代码:

```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()

```

四、实验结果截图

客户端运行结果:

发送6次100字节的数据

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

证书信息:

服务端运行截图:

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

以及平均时长

五、项目文件:文件夹python+SSL

参考文献

  • 基于J2EE架构的网上虚拟实验室平台设计与实现(国防科学技术大学·张俊)
  • 基于SSH的教学效果评价系统的设计与实现(吉林大学·文胡)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于MVC模式的远程教育支撑系统的设计与实现(北京邮电大学·靳海彬)
  • 基于MVC模式的远程教育支撑系统的设计与实现(北京邮电大学·靳海彬)
  • 基于B/S三层架构的标准化考试系统的设计与实现(中国海洋大学·刘红军 )
  • 面向远程实验的在线智能考试系统研究和开发(北京邮电大学·龚潘晶)
  • 基于WEB的普通心理学实验三维仿真系统研究与实现(西北大学·刘宏)
  • 基于Python的虚拟仪器设计与开发(中央民族大学·郑可富)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于SSH架构的个人空间交友网站的设计与实现(北京邮电大学·隋昕航)
  • 基于JSP的实验室项目管理系统的设计与实现(武汉理工大学·吕勇)
  • 衡水学院分院开放性实验管理系统的设计与实现(河北科技大学·王华秀)
  • 一种基于UNIX的互联网站搭建方案的关键技术与WEB2.0(中国水利水电科学研究院·罗皓)
  • 基于PHP+MySQL的交互学习系统的设计与实现(吉林大学·刘博)

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

相关推荐

发表回复

登录后才能评论