在之前的文章中,详细介绍了HTTPS的安全通道建立的整个过程,那么在本文中将会通过代码简单的将其实现。提前声明:采用python实现,且使用socket来进行通信连接。
首先,先建立客户端程序和服务器端程序。
服务器端程序代码①:首先利用socket实行客户端的监听作用:
import socket
#下面的代码是创建了套接字,socket.AF_INET指定地址族为IPv4,socket.SOCK_STREAM指定套接字类型为面向连接的TCP流式套接字。
mySocket = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)
mySocket.bind(('你的IP地址', 9999)) #可以填主机IP地址,也可以是127.0.0.1,后面是你想使用的端口号,作用是将上面创建的套接字绑定到本地的IP地址和端口号9999
mySocket.listen() #监听来自客户端的消息
客户端程序代码①:利用socket实行客户端连接服务器端:
import
mySocket = socket.socket() #默认会创建一个基于IPv4的TCP套接字,与之前示例中的socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)等效。
mySocket.connect(('192.168.56.1', 9999)) #尝试连接到IP地址为192.168.56.1和端口号为9999的服务器。
连接程序完成后需要实现客户端和服务器端之间的简单通信,所谓的简单通信就是不涉及隐私的请求过程。下面是请求过程所需的代码:
服务器端程序代码②:
#循环用于可以连续的接收来自客户端的信息
while True:
sk, address = mySocket.accept() #这行代码使之前处于监听状态的服务器套接字mySocket阻塞并等待一个客户端的连接请求。一旦有客户端连接,它就会接受这个连接请求,返回一个新的套接字sk用于与这个特定客户端通信,以及客户端的地址信息address(通常是一个包含IP地址和端口号的元组)。sk用于后续与该客户端的数据交换,而address可以用来追踪客户端的信息。
text_data = sk.recv(1024) #使用新创建的套接字sk调用recv()方法,从客户端接收数据。最多接受1024节数据,如果超过则需要多次调用
text = text_data.decode('utf-8') #对接手的数据进行解码
if text == '2':
send1 = '可以连接'
sk.send(send1.encode('utf-8'))
# 接收客户端的消息
text_data = sk.recv(1024)
text = text_data.decode('utf-8')
对于其中的2,这里简单的代表着客户端中的浏览器向服务器端发送连接请求的数据包 。服务器收到连接请求后会发送‘可以连接’并等待客户端的回应。
客户端程序代码②:
while True:
text1 = input('请输入2开始建立连接: ') #客户端将要发送连接请求
mySocket.send(text1.encode('utf-8')) #编码后发送
text2 = mySocket.recv(1024) #等待接收服务器端的回应
print(text2.decode('utf-8')) #编码
# 发送消息给服务器,确认正开始建立安全通道
message = input('请输入要发送给服务器的消息(key): ')
mySocket.send(message.encode('utf-8'))
在请求完成后,服务器端将准备SSL证书 ,证书包含服务器端的公钥以及证明自身合法性的一系列证明,这里由于是简单实现,因此只发生服务器端的公钥。
服务