我如何在 python 中建立双向加密的服务器-客户端连接?
How do i establish two way encrypted server-client-connection in python?
对于一个项目,我需要一个服务器和一个客户端。到目前为止不是问题。对我来说困难在于,必须对连接进行加密,因为将发送敏感信息。您可以使用 RSA 加密。我只是还不知道如何交换密钥,这样就没有人可以拦截它们或有任何其他机会接触到它们。
由于我不知道,一般情况下该怎么做,到目前为止我没有尝试任何东西。
这里是 Python 中的 TLS 连接实现。所有密钥交换和加密数据都在协议内完成。
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,我认为从 Python 3.7 开始可以使用更新版本的 TLS。
对于一个项目,我需要一个服务器和一个客户端。到目前为止不是问题。对我来说困难在于,必须对连接进行加密,因为将发送敏感信息。您可以使用 RSA 加密。我只是还不知道如何交换密钥,这样就没有人可以拦截它们或有任何其他机会接触到它们。 由于我不知道,一般情况下该怎么做,到目前为止我没有尝试任何东西。
这里是 Python 中的 TLS 连接实现。所有密钥交换和加密数据都在协议内完成。
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,我认为从 Python 3.7 开始可以使用更新版本的 TLS。