def do_handshake(self):
# incoming <- ClientHello
client_hello_size = struct.unpack('>I', recvall(self.socket, 4))[0]
client_hello = recvall(self.socket, client_hello_size)
self.incoming.write(client_hello)
# ServerHello..ServerHelloDone -> outgoing
try:
self.tls_bio.do_handshake()
except ssl.SSLWantReadError:
server_hello = self.outgoing.read()
server_hello_size = struct.pack('>I', len(server_hello))
self.socket.sendall(server_hello_size)
self.socket.sendall(server_hello)
# incoming <- [client]Certificate*..ClientKeyExchange..Finished
client_keyexchange_size = struct.unpack('>I', recvall(self.socket, 4))[0]
client_keyexchange = recvall(self.socket, client_keyexchange_size)
self.incoming.write(client_keyexchange)
# ChangeCipherSpec..Finished -> outgoing
self.tls_bio.do_handshake()
server_change_cipher_spec = self.outgoing.read()
server_change_cipher_spec_size = struct.pack('>I', len(server_change_cipher_spec))
self.socket.sendall(server_change_cipher_spec_size)
self.socket.sendall(server_change_cipher_spec)
评论列表
文章目录