实现 SSL 证书的 Python 套接字 [关闭]
Posted
技术标签:
【中文标题】实现 SSL 证书的 Python 套接字 [关闭]【英文标题】:Python Socket Implementing SSL Certificate [closed] 【发布时间】:2021-10-11 15:07:49 【问题描述】:我正在制作服务器/客户端套接字。 现在我想在服务器上实施 SSL 证书,以便加密连接。 在有人给我文档链接之前,我想说我已经看过了,但我仍然不知道如何实现它。
server.py:https://gist.github.com/comand100vip/19376a249b31ae66f46796749e2b9771 客户端.py:https://gist.github.com/comand100vip/a36f220fe4c0fe0bb1090b9668a79833 我放了链接,因为客户端和服务器加起来是 250 行,我不想要这里的文字墙。
【问题讨论】:
“我已经看过了,但我仍然不知道如何实现它。...” - 这是一个非常不具体的问题描述。由于不清楚您不了解什么,因此无法提供解决您特定问题的帮助。 documentation 已经包含示例,如果唯一的反馈是不具体的“不明白这个”,在此重复这些示例是没有意义的 【参考方案1】:导入 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:\nerror_msg")
【讨论】:
如何指定 SSL 证书的路径?客户是否需要任何更改? 这里是文档..查看更新的答案,因为我错过了添加这部分!应该是 load_cert_chain() 方法docs.python.org/3/library/ssl.html 我不完全确定您的流程是如何工作的,但您可能也需要包装您的客户端套接字 但是如何包装客户端套接字?我认为它只需要服务器端的证书。像每个网站一样。 这看起来不像 SSL 服务器。你在哪里调用监听套接字上的accept()
?以上是关于实现 SSL 证书的 Python 套接字 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章