Skip to content

Server https

https-server.py


#!/usr/bin/env python3
from http.server import HTTPServer, BaseHTTPRequestHandler
import ssl

class SimpleHTTPRequestHandler(BaseHTTPRequestHandler):
    def do_GET(self):
        self.send_response(200)
        self.end_headers()
        self.wfile.write(b'Hello from hacker!')
        print("GET: {}\nHeaders:\n{}\n".format(str(self.path), str(self.headers)))

    def do_POST(self):
        content_length = int(self.headers['Content-Length'])
        post_data = self.rfile.read(content_length)
        self.send_response(200)
        self.wfile.write(b'Hello from hacker!')
        self.end_headers()
        print("POST: {}\nHeaders:\n{}\n\nBody:\n{}\n".format(str(self.path), str(self.headers), post_data.decode('utf-8')))

httpd = HTTPServer(
    ('0.0.0.0', 443), 
    SimpleHTTPRequestHandler
)
httpd.socket = ssl.wrap_socket (
    httpd.socket, 
    keyfile="key.pem", 
    certfile='cert.pem', 
    server_side=True
)
httpd.serve_forever()
openssl req -x509 -newkey rsa:2048 -keyout key.pem -out cert.pem -days 365 -passout pass:hacker

curl GET request

curl --insecure https://$IP?param1=value1&param2=value2

curl POST request

curl --insecure -d "param1=value1&param2=value2" -X POST https://$IP

wget GET request

wget --no-check-certificate https://$IP?param1=value1&param2=value2 -O /dev/null

wget POST request

wget --no-check-certificate --method=POST --body-data="param1=value1&param2=value2" https://$IP -O /dev/null