Python 实现 SSL 证书的套接字
Python Socket Implementing SSL Certificate
我正在制作 server/client 套接字。
现在我想对服务器实施 SSL 证书,以便连接被加密。
在有人给我 link 文档之前,我想说我已经看过了,但我仍然不知道如何实现它。
server.py : https://gist.github.com/comand100vip/19376a249b31ae66f46796749e2b9771
client.py : https://gist.github.com/comand100vip/a36f220fe4c0fe0bb1090b9668a79833
我放 link,因为客户端和服务器加起来是 250 行,我不希望这里有文字墙。
导入 SSL 并设置上下文。您可以按照自己的意愿实施。例如,您可以将其移至 init 方法。然后将套接字包装在 SSL 上下文中。
import socket, ssl
class Connector:
HEADER = 1024
VERSION = "0.1"
servers_count = 0
server_alive = True
shutdown_event = threading.Event()
servers = []
FORMAT = "utf-8"
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()
def __init__(self, port, server_name):
print("\n[SERVER] Initializing server...")
self.s = None
self.HOST = "" # socket.gethostbyname(socket.gethostname())
self.PORT = port
self.server_name = server_name
self.conn = None
self.address = None
self.server_infos = {f"{Connector.servers_count}": f"{self.server_name}", "PORT": f"{self.PORT}", "HOST":
f"{self.HOST}"}
Connector.servers.append(self.server_infos)
print(f'[SERVER] Created server: "{self.server_name}", index of server: {self.servers_count}')
Connector.servers_count += 1
def create_socket(self):
print(f"[{self.server_name} - INFO] Creating socket...")
try:
self.s = socket.socket()
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(self.s,server_hostname=self.HOST)
ssl_sock.connect((self.address, self.PORT))
print(f"[{self.server_name} - DONE] Creating socket done!")
except socket.error as error_msg:
print(f"[{self.server_name} - ERROR] creating socket:\n{error_msg}")
我正在制作 server/client 套接字。
现在我想对服务器实施 SSL 证书,以便连接被加密。
在有人给我 link 文档之前,我想说我已经看过了,但我仍然不知道如何实现它。
server.py : https://gist.github.com/comand100vip/19376a249b31ae66f46796749e2b9771
client.py : https://gist.github.com/comand100vip/a36f220fe4c0fe0bb1090b9668a79833
我放 link,因为客户端和服务器加起来是 250 行,我不希望这里有文字墙。
导入 SSL 并设置上下文。您可以按照自己的意愿实施。例如,您可以将其移至 init 方法。然后将套接字包装在 SSL 上下文中。
import socket, ssl
class Connector:
HEADER = 1024
VERSION = "0.1"
servers_count = 0
server_alive = True
shutdown_event = threading.Event()
servers = []
FORMAT = "utf-8"
context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
context.load_cert_chain('/path/to/certchain.pem', '/path/to/private.key')
context.verify_mode = ssl.CERT_REQUIRED
context.check_hostname = True
context.load_default_certs()
def __init__(self, port, server_name):
print("\n[SERVER] Initializing server...")
self.s = None
self.HOST = "" # socket.gethostbyname(socket.gethostname())
self.PORT = port
self.server_name = server_name
self.conn = None
self.address = None
self.server_infos = {f"{Connector.servers_count}": f"{self.server_name}", "PORT": f"{self.PORT}", "HOST":
f"{self.HOST}"}
Connector.servers.append(self.server_infos)
print(f'[SERVER] Created server: "{self.server_name}", index of server: {self.servers_count}')
Connector.servers_count += 1
def create_socket(self):
print(f"[{self.server_name} - INFO] Creating socket...")
try:
self.s = socket.socket()
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ssl_sock = context.wrap_socket(self.s,server_hostname=self.HOST)
ssl_sock.connect((self.address, self.PORT))
print(f"[{self.server_name} - DONE] Creating socket done!")
except socket.error as error_msg:
print(f"[{self.server_name} - ERROR] creating socket:\n{error_msg}")