|
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