Skip to content

Instantly share code, notes, and snippets.

@DannyHinshaw
Forked from guyo13/simple-https-server.py
Last active April 8, 2024 04:16
Show Gist options
  • Star 43 You must be signed in to star a gist
  • Fork 8 You must be signed in to fork a gist
  • Save DannyHinshaw/a3ac5991d66a2fe6d97a569c6cdac534 to your computer and use it in GitHub Desktop.
Save DannyHinshaw/a3ac5991d66a2fe6d97a569c6cdac534 to your computer and use it in GitHub Desktop.
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/
# generate server.pem with the following command:
# openssl req -new -x509 -keyout key.pem -out server.pem -days 365 -nodes
# run as follows:
# python simple-https-server.py
# then in your browser, visit:
# https://localhost:4443
import http.server
import ssl
server_address = ('localhost', 4443)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
httpd.socket = ssl.wrap_socket(httpd.socket,
server_side=True,
certfile="server.pem",
keyfile="key.pem",
ssl_version=ssl.PROTOCOL_TLS)
httpd.serve_forever()
@evandrix
Copy link

server.xml server.pem

@johnthagen
Copy link

To serve on all interfaces (so other devices on the network can connect):

server_address = ('', 4443)

@ingnelson
Copy link

How to add a response : HTTP/1.1 200 Connection established\r\n\r\n when someone send a http request with CONNECT method ???

Copy link

ghost commented Nov 23, 2022

Hello!
This program works great with keys 2046 bit, but when i use key size 256 bit, program sends erroq.
Unfortionatly i need to use this size (256) can you help me to resolvw it please?
Снимок экрана 2022-11-23 в 23 25 40

@candlerb
Copy link

There have been some more deprecations. New version without deprecation warnings (in python 3.10 anyway) looks like this:

import http.server
import ssl

server_address = ('', 4443)
httpd = http.server.HTTPServer(server_address, http.server.SimpleHTTPRequestHandler)
ctx = ssl.SSLContext(protocol=ssl.PROTOCOL_TLS_SERVER)
ctx.load_cert_chain(certfile="server.pem", keyfile="key.pem")
httpd.socket = ctx.wrap_socket(httpd.socket, server_side=True)
httpd.serve_forever()

@xNul
Copy link

xNul commented Apr 8, 2024

None of these worked for me, but twistd -no web --path=. --https=443 -c cert.pem -k key.pem did. Can be installed via pip install twisted. I was able to use a Let's Encrypt certificate generated by certbot so it can be used across the internet.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment