環境
- Python 3.12
やりたいこと
HTTPサーバーなら
❯ python -m http.server -p 8080 Serving HTTP on :: port 8000 (http://[::]:8000/) ...
と標準コマンドで起動できるが、HTTPSだと自分でコードを実装しなければいけないらしい。
コード
import http.server import ssl PORT = 8080 server_address = ("0.0.0.0", PORT) # SimpleHTTPRequestHandler: カレントディレクトリをドキュメントルートとする簡易ハンドラ handler = http.server.SimpleHTTPRequestHandler # HTTPServerインスタンスの生成(ThreadingMixInを使用しないシングルスレッド実装) httpd = http.server.HTTPServer(server_address, handler) # TLS 1.2以上を強制するSSLContextの生成(PROTOCOL_TLS_SERVERはPython 3.6+で推奨) # Python 3.12ではTLS 1.3がデフォルトで有効化される context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER) context.load_cert_chain(certfile="example.crt", keyfile="example.key") # 既存のソケットをSSL/TLSでラップ(server_side=Trueでサーバーモード) # この実装ではソケットの再利用(SO_REUSEADDR)が考慮されていない点に注意 httpd.socket = context.wrap_socket(httpd.socket, server_side=True) print(f"HTTPS Server running on https://0.0.0.0:{PORT}") httpd.serve_forever()