blob: 5fe8fc5b86a35235402ae43836341a7ccd0d56c4 [file] [log] [blame]
Gabriel Cubaf7349962023-04-26 12:01:25 -05001from base64 import b64decode
Gabriel Cuba8b7a3952022-11-02 17:21:50 -05002import logging
3import ssl
Gabriel Cubaf7349962023-04-26 12:01:25 -05004from .util_kubernetes import get_secret_data
Gabriel Cuba8b7a3952022-11-02 17:21:50 -05005
6logger = logging.getLogger("osm_ee.util_grpc")
Gabriel Cubaf7349962023-04-26 12:01:25 -05007SERVER_CERT_SECRET = "ee-tls"
8CLIENT_CA_SECRET = "osm-ca"
9SERVER_CERT_FILE = "/etc/ssl/ee-tls.crt"
10SERVER_KEY_FILE = "/etc/ssl/ee-tls.key"
11CLIENT_CA_FILE = "/etc/ssl/osm-ca.crt"
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050012
13
14def create_secure_context() -> ssl.SSLContext:
Gabriel Cubaf7349962023-04-26 12:01:25 -050015 # retrieve certificates from secrets
16 if not _retrieve_certs():
17 logger.warning("TLS Certificates not found, starting gRPC server in unsecure mode")
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050018 return None
Gabriel Cubaf7349962023-04-26 12:01:25 -050019 # create SSL context
20 ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
21 ctx.verify_mode = ssl.CERT_REQUIRED
22 ctx.load_cert_chain(SERVER_CERT_FILE, SERVER_KEY_FILE)
23 ctx.load_verify_locations(CLIENT_CA_FILE)
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050024 ctx.set_ciphers('ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20')
25 ctx.set_alpn_protocols(['h2'])
26 try:
27 ctx.set_npn_protocols(['h2'])
28 except NotImplementedError:
29 pass
Gabriel Cubaf7349962023-04-26 12:01:25 -050030 return ctx
31
32
33def _retrieve_certs():
34 _server_data = get_secret_data(SERVER_CERT_SECRET)
35 lcm_ca = get_secret_data(CLIENT_CA_SECRET).get("ca.crt")
36 if not (_server_data and lcm_ca):
37 return False
38 server_cert = _server_data.get("tls.crt")
39 with open(SERVER_CERT_FILE, "w") as server_cert_file:
40 server_cert_file.write(b64decode(server_cert).decode())
41 server_key = _server_data.get("tls.key")
42 with open(SERVER_KEY_FILE, "w") as server_key_file:
43 server_key_file.write(b64decode(server_key).decode())
44 with open(CLIENT_CA_FILE, "w") as client_ca_file:
45 client_ca_file.write(b64decode(lcm_ca).decode())
46 return True