У меня есть этот основной код, который на самом деле является веб-сервером http, который работает нормально, но завершение из-за ошибок SSL (пожалуйста, прокрутите вниз)
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()
Ошибка
> 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)
Мне нужно две вещи:
- Либо игнорировать любые ошибки сертификата SSL (пример:
sslopt={"cert_reqs": ssl.CERT_NONE}
, но он не работает при передаче через run_forever
- Поймать эту ошибку SSL, реализовав
run_forever
чей пример кода я не могу найти.
При реализации многопоточного сервера HTTPS я обнаружил, что Python документации не хватает по сравнению с другими языками. Рабочие примеры найти сложно.