凌峰创科服务平台

Python如何快速搭建HTTPS服务器?

Python HTTPS 服务器指南

Python 提供了内置的模块来创建 HTTPS 服务器,最常用的是 http.serverssl 模块,下面我将介绍几种创建 HTTPS 服务器的不同方法。

Python如何快速搭建HTTPS服务器?-图1
(图片来源网络,侵删)

使用 http.server 和 ssl 模块(Python 3.x)

from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl
# 创建HTTP服务器
server_address = ('', 4443)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
# 配置SSL
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
context.load_cert_chain('server.crt', 'server.key')  # 替换为你的证书和私钥路径
# 包装HTTP服务器为HTTPS服务器
httpd.socket = context.wrap_socket(httpd.socket, server_side=True)
print("HTTPS服务器启动在端口4443...")
httpd.serve_forever()

生成自签名证书(仅用于测试)

如果你没有证书,可以先生成一个自签名证书:

openssl req -x509 -newkey rsa:4096 -keyout server.key -out server.crt -days 365 -nodes

使用 Flask + Flask-Talisman

对于更复杂的Web应用,可以使用Flask框架:

from flask import Flask
from flask_talisman import Talisman
app = Flask(__name())
Talisman(app, force_https=True)  # 强制使用HTTPS
@app.route('/')
def hello():
    return "Hello, HTTPS World!"
if __name__ == '__main__':
    app.run(ssl_context='adhoc')  # 使用adhoc创建临时证书
    # 或者使用证书文件: app.run(ssl_context=('server.crt', 'server.key'))

使用 FastAPI

from fastapi import FastAPI
import uvicorn
app = FastAPI()
@app.get("/")
def read_root():
    return {"message": "Hello, HTTPS World!"}
if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=4443, ssl_keyfile="server.key", ssl_certfile="server.crt")

使用 aiohttp

from aiohttp import web
import ssl
app = web.Application()
async def handle(request):
    return web.Response(text="Hello, HTTPS World!")
app.add_routes([web.get('/', handle)])
if __name__ == '__main__':
    ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH)
    ssl_context.load_cert_chain('server.crt', 'server.key')
    web.run_app(app, host='0.0.0.0', port=4443, ssl_context=ssl_context)

注意事项

  1. 证书:生产环境应使用受信任的证书(如Let's Encrypt免费证书),自签名证书仅用于测试
  2. 端口:HTTPS默认使用443端口,可能需要管理员权限
  3. 安全性:确保私钥文件安全,不要泄露
  4. Python版本http.server的HTTPS支持在Python 3.7+中更稳定

生产环境建议

对于生产环境,建议使用成熟的Web服务器如Nginx或Apache作为反向代理,处理HTTPS请求,然后将流量转发到Python应用:

客户端 -> Nginx(HTTPS) -> Python应用(HTTP)

这样可以利用Nginx的高性能和成熟的SSL处理能力,同时保持Python应用的灵活性。

Python如何快速搭建HTTPS服务器?-图2
(图片来源网络,侵删)
Python如何快速搭建HTTPS服务器?-图3
(图片来源网络,侵删)
分享:
扫描分享到社交APP
上一篇
下一篇