|
5 | 5 | import os |
6 | 6 | import shutil |
7 | 7 | import signal |
| 8 | +import ssl |
8 | 9 | import sys |
9 | 10 | import _thread |
10 | 11 |
|
@@ -83,6 +84,24 @@ def __init__(self, config_file, disable_auth_warning=True): |
83 | 84 |
|
84 | 85 | self._parse_config(config_file) |
85 | 86 |
|
| 87 | + def _initialize_ssl_context(self): |
| 88 | + ssl_context = ssl.create_default_context(ssl.Purpose.CLIENT_AUTH) |
| 89 | + |
| 90 | + ssl_context.load_cert_chain( |
| 91 | + certfile=self.settings[SettingsParameters.CertificateFile], |
| 92 | + keyfile=self.settings[SettingsParameters.KeyFile] |
| 93 | + ) |
| 94 | + |
| 95 | + min_tls = self.settings[SettingsParameters.MinimumTLSVersion] |
| 96 | + if not hasattr(ssl.TLSVersion, min_tls): |
| 97 | + logger.warning(f"Unrecognized value for TABPY_MINIMUM_TLS_VERSION: {min_tls}") |
| 98 | + min_tls = "TLSv1_2" |
| 99 | + |
| 100 | + logger.info(f"Setting minimum TLS version to {min_tls}") |
| 101 | + ssl_context.minimum_version = ssl.TLSVersion[min_tls] |
| 102 | + |
| 103 | + return ssl_context |
| 104 | + |
86 | 105 | def _get_tls_certificates(self, config): |
87 | 106 | tls_certificates = [] |
88 | 107 | cert = config[SettingsParameters.CertificateFile] |
@@ -127,10 +146,7 @@ def run(self): |
127 | 146 | protocol = self.settings[SettingsParameters.TransferProtocol] |
128 | 147 | ssl_options = None |
129 | 148 | if protocol == "https": |
130 | | - ssl_options = { |
131 | | - "certfile": self.settings[SettingsParameters.CertificateFile], |
132 | | - "keyfile": self.settings[SettingsParameters.KeyFile], |
133 | | - } |
| 149 | + ssl_options = self._initialize_ssl_context() |
134 | 150 | elif protocol != "http": |
135 | 151 | msg = f"Unsupported transfer protocol {protocol}." |
136 | 152 | logger.critical(msg) |
@@ -328,6 +344,8 @@ def _parse_config(self, config_file): |
328 | 344 | (SettingsParameters.CertificateFile, ConfigParameters.TABPY_CERTIFICATE_FILE, |
329 | 345 | None, None), |
330 | 346 | (SettingsParameters.KeyFile, ConfigParameters.TABPY_KEY_FILE, None, None), |
| 347 | + (SettingsParameters.MinimumTLSVersion, ConfigParameters.TABPY_MINIMUM_TLS_VERSION, |
| 348 | + "TLSv1_2", None), |
331 | 349 | (SettingsParameters.StateFilePath, ConfigParameters.TABPY_STATE_PATH, |
332 | 350 | os.path.join(pkg_path, "tabpy_server"), None), |
333 | 351 | (SettingsParameters.StaticPath, ConfigParameters.TABPY_STATIC_PATH, |
|
0 commit comments