48 lines
1.9 KiB
Diff
48 lines
1.9 KiB
Diff
diff -aruN keylime-6.5.2/keylime/registrar_common.py keylime-6.5.2.alma/keylime/registrar_common.py
|
|
--- keylime-6.5.2/keylime/registrar_common.py 2022-11-11 00:48:51
|
|
+++ keylime-6.5.2.alma/keylime/registrar_common.py 2023-09-12 18:46:40
|
|
@@ -2,7 +2,9 @@
|
|
import http.server
|
|
import ipaddress
|
|
import os
|
|
+import select
|
|
import signal
|
|
+import ssl
|
|
import sys
|
|
import threading
|
|
from http.server import BaseHTTPRequestHandler, HTTPServer
|
|
@@ -30,6 +32,24 @@
|
|
|
|
|
|
class ProtectedHandler(BaseHTTPRequestHandler, SessionManager):
|
|
+ def handle(self) -> None:
|
|
+ """ Need to perform SSL handshake here, as do_handshake_on_connect=False for non-blocking SSL socket """
|
|
+ while True:
|
|
+ try:
|
|
+ self.request.do_handshake()
|
|
+ break
|
|
+ except ssl.SSLWantReadError:
|
|
+ select.select([self.request], [], [])
|
|
+ except ssl.SSLWantWriteError:
|
|
+ select.select([], [self.request], [])
|
|
+ except ssl.SSLError as e:
|
|
+ logger.error("SSL connection error: %s", e)
|
|
+ return
|
|
+ except Exception as e:
|
|
+ logger.error("General communication failure: %s", e)
|
|
+ return
|
|
+ BaseHTTPRequestHandler.handle(self)
|
|
+
|
|
def do_HEAD(self):
|
|
"""HEAD not supported"""
|
|
web_util.echo_json_response(self, 405, "HEAD not supported")
|
|
@@ -490,7 +510,7 @@
|
|
protected_server = RegistrarServer((host, tlsport), ProtectedHandler)
|
|
context = web_util.init_mtls("registrar", logger=logger)
|
|
if context is not None:
|
|
- protected_server.socket = context.wrap_socket(protected_server.socket, server_side=True)
|
|
+ protected_server.socket = context.wrap_socket(protected_server.socket, server_side=True, do_handshake_on_connect=False)
|
|
thread_protected_server = threading.Thread(target=protected_server.serve_forever)
|
|
|
|
# Set up the unprotected registrar server
|