实现 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 套接字 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Python 创建 SSL 套接字服务器

iOS开发HTTPS实现之信任SSL证书和自签名证书

SSL是什么的简称?SSL证书是什么

openssl实现公私钥证书生成以及转换

在 Python 中打开 SSL 套接字连接

traefik 配置自动申请ssl免费证书