I've this main code which is actually http webserver, which is working fine but termination due SSL errors(pl scroll down)
class ThreadingSimpleServer(ThreadingMixIn, HTTPServer):
pass
def run():
port =80
if USE_HTTPS:
port=443
server = ThreadingSimpleServer(('0.0.0.0', port), PostHandler)
if USE_HTTPS:
import ssl
server.socket = ssl.wrap_socket(server.socket, keyfile='./ssl/key.pem', certfile='./ssl/public.pem', server_side=True)
server.serve_forever()
Error
> File "/usr/lib/python3.6/socketserver.py", line 654, in
> process_request_thread
> self.finish_request(request, client_address) File "/usr/lib/python3.6/socketserver.py", line 364, in finish_request
> self.RequestHandlerClass(request, client_address, self) File "/usr/lib/python3.6/socketserver.py", line 724, in __init__
> self.handle() File "/usr/lib/python3.6/http/server.py", line 418, in handle
> self.handle_one_request() File "/usr/lib/python3.6/http/server.py", line 386, in handle_one_request
> self.raw_requestline = self.rfile.readline(65537) File "/usr/lib/python3.6/socket.py", line 586, in readinto
> return self._sock.recv_into(b) File "/usr/lib/python3.6/ssl.py", line 1012, in recv_into
> return self.read(nbytes, buffer) File "/usr/lib/python3.6/ssl.py", line 874, in read
> return self._sslobj.read(len, buffer) File "/usr/lib/python3.6/ssl.py", line 631, in read
> v = self._sslobj.read(len, buffer) ssl.SSLError: [SSL: TLSV1_ALERT_UNKNOWN_CA] tlsv1 alert unknown ca (_ssl.c:2309)
I need two things:
- Either to ignore any SSL certificate errors( example:
sslopt={"cert_reqs": ssl.CERT_NONE}
but it does not work when passed thrurun_forever
- Catch this SSL error by implementing
run_forever
whose sample code i'm not able to find.
When doing HTTPS multithread server implementation I find Python documentation lacking compared to other languages. Working examples difficult to find.