Created
October 17, 2013 17:07
-
Star
(649)
You must be signed in to star a gist -
Fork
(189)
You must be signed in to fork a gist
-
-
Save dergachev/7028596 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# taken from http://www.piware.de/2011/01/creating-an-https-server-in-python/ | |
# generate server.xml with the following command: | |
# openssl req -new -x509 -keyout server.pem -out server.pem -days 365 -nodes | |
# run as follows: | |
# python simple-https-server.py | |
# then in your browser, visit: | |
# https://localhost:4443 | |
import BaseHTTPServer, SimpleHTTPServer | |
import ssl | |
httpd = BaseHTTPServer.HTTPServer(('localhost', 4443), SimpleHTTPServer.SimpleHTTPRequestHandler) | |
httpd.socket = ssl.wrap_socket (httpd.socket, certfile='./server.pem', server_side=True) | |
httpd.serve_forever() |
Can you help me how to make this work?
#!/usr/bin/python from BaseHTTPServer import BaseHTTPRequestHandler,HTTPServer import ssl import sys PORT_NUMBER = int(sys.argv[1]) #This class will handles any incoming request from #the browser class myHandler(BaseHTTPRequestHandler): #Handler for the GET requests def do_GET(self): print(self.requestline) #print(self.rfile.read(content_length)) self.send_response(200) self.send_header('Content-type','text/html') self.end_headers() # Send the html message self.wfile.write("Hello World !".encode()) return try: #Create a web server and define the handler to manage the #incoming request server = HTTPServer(('', PORT_NUMBER), myHandler) server.socket = ssl.wrap_socket(server.socket, certfile='cert.pem',keyfile='key.pem', server_side=True) print 'Started httpserver on port ' , PORT_NUMBER #Wait forever for incoming htto requests server.serve_forever() except KeyboardInterrupt: print '^C received, shutting down the web server' server.socket.close()When I run it and load it from the browser... It's only loading and never displaying the "Hello Word!" text. But it'll only show when I ctrl+c the server whilst loading. Can anyone tell me what's the solution for this?
openssl req -new -x509 -keyout key.pem -out server.pem -days 365 -nodes
#!/usr/bin/python
import http.server
import ssl
import sys
# Open SSL Certificate
# openssl req -new -x509 -keyout key.pem -out server.pem -days 365 -nodes
PORT_NUMBER = int(sys.argv[1])
# This class will handles any incoming request from
# the browser
class myHandler(http.server.SimpleHTTPRequestHandler):
# Handler for the GET requests
def do_GET(self):
print(self.requestline)
# print(self.rfile.read(content_length))
self.send_response(200)
self.send_header('Content-type', 'text/html')
self.end_headers()
# Send the html message
self.wfile.write("Hello World !".encode())
return
try:
# Create a web server and define the handler to manage the
# incoming request
server = http.server.HTTPServer(('', PORT_NUMBER), myHandler)
server.socket = ssl.wrap_socket(server.socket, certfile='cert.pem', keyfile='key.pem', server_side=True)
print('Started httpserver on port ', PORT_NUMBER)
# Wait forever for incoming htto requests
server.serve_forever()
except KeyboardInterrupt:
print('^C received, shutting down the web server')
server.socket.close()
Updated to Python 3.11.4 (http.server module changes, ssl module changes/deprecations)
from http.server import HTTPServer, SimpleHTTPRequestHandler
import ssl
from pathlib import Path
port = 4443
httpd = HTTPServer(("localhost", port), SimpleHTTPRequestHandler)
ssl_context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
ssl_context.load_cert_chain(Path(__file__).parent / "server.pem")
httpd.socket = ssl_context.wrap_socket(
httpd.socket,
server_side=True,
)
print(f"Serving on https://localhost:{port}")
httpd.serve_forever()
Nice!
Do you guys get it work on 443 port? It works on any other port on my laptop but 443. Though nmap
and netstat -tulpn
show the port is open, curl
and openssl s_client
always say connection refused.
@Dragorn421 Thanks for the up-to-date version! 🙂️
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
hi @Honghe and @jcPOLO used this snippet of https on local host - there is an error message:
Can't open C:\Program Files\Common Files\ssl/openssl.cnf for reading, No such file or directoryCan't open C:\Program Files\Common Files\ssl/openssl.cnf for reading, No such file or directory
how can I generate this cnf file correctly?
thanks
Ori