Как мне установить двустороннее зашифрованное соединение сервер-клиент в Python? - PullRequest
0 голосов
/ 23 октября 2019

Для проекта мне нужен сервер и клиент. Пока не проблема. Для меня сложность в том, что соединение должно быть зашифровано, так как будет отправлена ​​разумная информация. Вы можете использовать шифрование RSA. Я просто еще не знаю, как обменять ключи, чтобы никто не мог их перехватить или получить какой-либо другой шанс связаться с ними. Поскольку я не знаю, как это вообще сделать, я пока ничего не пробовал.

1 Ответ

2 голосов
/ 23 октября 2019

Вот реализация TLS-соединения в Python. Весь обмен ключами и шифрование данных выполняются в рамках протокола.

import socket
import ssl

def main():
  #Define Host Name And Port (Port 443 Is Typical Encrypted Web Connection Port)
  host_name = "www.google.com"
  host_port = 443

  #Create Unencrypted Connection And Then Encrypted It By Wrapping It
  unencrypted_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  unencrypted_socket.settimeout(10)
  encrypted_socket = ssl.wrap_socket(unencrypted_socket,ssl_version=ssl.PROTOCOL_TLSv1) #Optional Ciphers Spec Parameter Too

  #Connect To The Host, Send Data And Wait To Recieve Data
  encrypted_socket.connect((host_name,host_port))
  encrypted_socket.send(b"Hello")
  response = encrypted_socket.recv(512)

  #Close The Connection
  encrypted_socket.close()

main()

Примечание. Я использую Python 3.6 и считаю, что более новая версия TLS доступна для использования начиная с Python 3.7.

...