blob: 2dc68fa87e3949a3a0eebcca4dd6bcd50bca8a3e [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():
garciadeblas43fc9352024-07-09 14:30:44 +020017 logger.warning(
18 "TLS Certificates not found, starting gRPC server in unsecure mode"
19 )
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050020 return None
Gabriel Cubaf7349962023-04-26 12:01:25 -050021 # create SSL context
22 ctx = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)
23 ctx.verify_mode = ssl.CERT_REQUIRED
24 ctx.load_cert_chain(SERVER_CERT_FILE, SERVER_KEY_FILE)
25 ctx.load_verify_locations(CLIENT_CA_FILE)
garciadeblas43fc9352024-07-09 14:30:44 +020026 ctx.set_ciphers("ECDHE+AESGCM:ECDHE+CHACHA20:DHE+AESGCM:DHE+CHACHA20")
27 ctx.set_alpn_protocols(["h2"])
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050028 try:
garciadeblas43fc9352024-07-09 14:30:44 +020029 ctx.set_npn_protocols(["h2"])
Gabriel Cuba8b7a3952022-11-02 17:21:50 -050030 except NotImplementedError:
31 pass
Gabriel Cubaf7349962023-04-26 12:01:25 -050032 return ctx
33
34
35def _retrieve_certs():
36 _server_data = get_secret_data(SERVER_CERT_SECRET)
37 lcm_ca = get_secret_data(CLIENT_CA_SECRET).get("ca.crt")
38 if not (_server_data and lcm_ca):
39 return False
40 server_cert = _server_data.get("tls.crt")
41 with open(SERVER_CERT_FILE, "w") as server_cert_file:
42 server_cert_file.write(b64decode(server_cert).decode())
43 server_key = _server_data.get("tls.key")
44 with open(SERVER_KEY_FILE, "w") as server_key_file:
45 server_key_file.write(b64decode(server_key).decode())
46 with open(CLIENT_CA_FILE, "w") as client_ca_file:
47 client_ca_file.write(b64decode(lcm_ca).decode())
48 return True