-
-
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() |
Works fine when trying to access it from the same computer it's running from but when trying to access it from another device it does not work for me. I just replace localhost with the local ip address. Any idea ?
server.xml server.pem
To serve on all interfaces (so other devices on the network can connect):
server_address = ('', 4443)How to add a response : HTTP/1.1 200 Connection established\r\n\r\n when someone send a http request with CONNECT method ???
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()
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.

So I am new to Python and real computer languages and techniques. What is meant in the comment by generate an XML with "open...-nodes"?
I understand that I need to run the python code in cmd, but what does the XML file do and what is it supposed to look like? i ran the basic http code before using:
python -m http.server
but i didnt realize that it had to be a secure server for what I needed.