Skip to content

Python3 简单的HTTPS服务器

发表: at 11:00

在本文中,我们将介绍如何使用Python 3创建一个简单的HTTPS服务器。HTTPS是一种通过加密和认证来保护网络通信的协议,它在当前的网络通信中起着至关重要的作用。我们将使用Python 3的内置模块http.server来创建一个基本的HTTPS服务器。

Python 3的http.server模块

Python 3的http.server模块是一个用于创建Web服务器的简单工具。它提供了的基本HTTP请求处理功能,并且可以很容易地扩展。通过使用http.server模块的SimpleHTTPRequestHandler类,我们可以轻松地创建一个基本的HTTP服务器。在本文中,我们将展示如何对其中的一个子类http.server.HTTPServer进行扩展,以创建一个HTTPS服务器。

以下是创建一个简单HTTPS服务器的步骤:

1. 生成密钥和证书文件

在使用HTTPS协议之前,我们需要为服务器生成一个密钥和一个证书文件。密钥文件用于加密和解密HTTPS流量,而证书文件用于验证服务器身份。生成这些文件的方法有很多,但在本文中,我们将使用OpenSSL工具生成它们。
首先,我们需要安装OpenSSL。在命令行中输入以下命令:

$ sudo apt-get install openssl

安装完成后,我们可以使用以下命令生成密钥和证书文件:

$ openssl req -x509 -newkey rsa:4096 -nodes -out cert.pem -keyout key.pem -days 365

上述命令将生成一个自签名的证书和密钥文件,有效期为365天。生成的cert.pemkey.pem文件将在后续的步骤中使用。

2. 编写Python代码

接下来,我们需要编写Python代码来创建HTTPS服务器。在您选择存储服务器代码的位置创建一个名为server.py的文件,并添加以下代码:

import http.server
import ssl

class SimpleHTTPSRequestHandler(http.server.SimpleHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.send_header('Content-type', 'text/html')
        self.end_headers()
        self.wfile.write(b'Hello, world!')

server_address = ('', 8000)
httpd = http.server.HTTPServer(server_address, SimpleHTTPSRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket, certfile='cert.pem', keyfile='key.pem', server_side=True)
httpd.serve_forever()

在上面的代码中,我们首先导入了http.serverssl模块。然后,我们定义了一个名为SimpleHTTPSRequestHandler的子类,继承自http.server.SimpleHTTPRequestHandler。在这个子类中,我们重写了do_GET方法,该方法处理HTTP的GET请求,并返回一个简单的“Hello, world!”消息。
接下来,我们定义了服务器的地址为('', 8000),并创建了一个http.server.HTTPServer对象。然后,我们使用ssl.wrap_socket函数将HTTP服务器的套接字包装成一个SSL/TLS套接字。ssl.wrap_socket函数接受一个certfile参数用于指定证书文件的路径,以及一个keyfile参数用于指定密钥文件的路径。
最后,我们调用httpd.serve_forever()方法来启动服务器并监听客户端的连接。

3. 运行服务器

在您的命令行中,以root权限运行以下命令来启动服务器:

$ sudo python3 server.py

服务器将在本地的8000端口上启动。您可以在浏览器中访问https://localhost:8000来测试服务器是否正常工作。

总结

本文介绍了如何使用Python 3的内置模块http.server创建一个简单的HTTPS服务器。我们通过生成密钥和证书文件,并使用ssl.wrap_socket函数将HTTP服务器的套接字包装成一个SSL/TLS套接字,成功创建了一个基本的HTTPS服务器。这只是一个简单的示例,您可以根据自己的需求来扩展服务器的功能。希望本文对您有所帮助!

参考资料:

[1] Python 官方文档 – http.server — HTTP servers, https://docs.python.org/3/library/http.server.html https://geek-docs.com/html/html-top-tutorials/1000100_html_index.html
[2] Python 官方文档 – ssl — TLS/SSL wrapper for socket objects, https://docs.python.org/3/library/ssl.html


上篇文章
一文了解思维链(Chain-of-Thought, CoT)
下篇文章
详解带飞大模型的背后大佬MCP | 含用“嘴”写前端代码精装案例 FigmaMCP 应用指引