From 3e16887e0f3171c522afb74e9882cd76590d0cfc Mon Sep 17 00:00:00 2001 From: Ian Gulliver Date: Sun, 3 Apr 2016 12:14:26 -0700 Subject: [PATCH] Start of a real app framework --- certserver.py | 65 +++++++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 10 deletions(-) diff --git a/certserver.py b/certserver.py index fbc72c1..5a27b71 100755 --- a/certserver.py +++ b/certserver.py @@ -1,20 +1,65 @@ #!/usr/bin/python3 +import argparse from http import server import socket import ssl +parser = argparse.ArgumentParser(description='certserver') +parser.add_argument( + '--listen-host', + dest='listen_host', + action='store', + default='::') +parser.add_argument( + '--listen-port', + dest='listen_port', + type=int, + action='store', + default=443) +parser.add_argument( + '--server-key', + dest='server_key', + action='store', + required=True) +parser.add_argument( + '--server-cert', + dest='server_cert', + action='store', + required=True) +FLAGS = parser.parse_args() + + class HTTPServer6(server.HTTPServer): address_family = socket.AF_INET6 -httpd = HTTPServer6(('', 4443), server.SimpleHTTPRequestHandler) -httpd.socket = ssl.wrap_socket( - httpd.socket, - keyfile='/home/flamingcow/ca/client/private/test1.key.pem', - certfile='/home/flamingcow/ca/client/certs/test1.cert.pem', - server_side=True, - cert_reqs=ssl.CERT_REQUIRED, - ssl_version=ssl.PROTOCOL_TLSv1_2, - ciphers='ECDHE-ECDSA-AES256-GCM-SHA384') -httpd.serve_forever() + +class CertServer(object): + + def __init__(self, listen_host, listen_port, server_key, server_cert): + self._httpd = HTTPServer6((listen_host, listen_port), server.SimpleHTTPRequestHandler) + self._httpd.socket = ssl.wrap_socket( + self._httpd.socket, + keyfile=server_key, + certfile=server_cert, + server_side=True, + cert_reqs=ssl.CERT_REQUIRED, + ssl_version=ssl.PROTOCOL_TLSv1_2, + ciphers='ECDHE-ECDSA-AES256-GCM-SHA384') + + def Serve(self): + self._httpd.serve_forever() + + +def main(): + server = CertServer( + FLAGS.listen_host, + FLAGS.listen_port, + FLAGS.server_key, + FLAGS.server_cert) + server.Serve() + + +if __name__ == '__main__': + main()