|
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,23 @@ 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.SERVER_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.get(SettingsParameters.MinimumTLSVersion) |
| 96 | + try: |
| 97 | + ssl_context.minimum_version = ssl.TLSVersion[min_tls] |
| 98 | + logger.info(f"Setting minimum TLS version to: {min_tls}") |
| 99 | + except KeyError: |
| 100 | + logger.warning(f"Unrecognized value for TABPY_MINIMUM_TLS_VERSION: {min_tls}") |
| 101 | + |
| 102 | + return ssl_context |
| 103 | + |
86 | 104 | def _get_tls_certificates(self, config):
|
87 | 105 | tls_certificates = []
|
88 | 106 | cert = config[SettingsParameters.CertificateFile]
|
@@ -127,10 +145,7 @@ def run(self):
|
127 | 145 | protocol = self.settings[SettingsParameters.TransferProtocol]
|
128 | 146 | ssl_options = None
|
129 | 147 | if protocol == "https":
|
130 |
| - ssl_options = { |
131 |
| - "certfile": self.settings[SettingsParameters.CertificateFile], |
132 |
| - "keyfile": self.settings[SettingsParameters.KeyFile], |
133 |
| - } |
| 148 | + ssl_options = self._initialize_ssl_context() |
134 | 149 | elif protocol != "http":
|
135 | 150 | msg = f"Unsupported transfer protocol {protocol}."
|
136 | 151 | logger.critical(msg)
|
@@ -328,6 +343,8 @@ def _parse_config(self, config_file):
|
328 | 343 | (SettingsParameters.CertificateFile, ConfigParameters.TABPY_CERTIFICATE_FILE,
|
329 | 344 | None, None),
|
330 | 345 | (SettingsParameters.KeyFile, ConfigParameters.TABPY_KEY_FILE, None, None),
|
| 346 | + (SettingsParameters.MinimumTLSVersion, ConfigParameters.TABPY_MINIMUM_TLS_VERSION, |
| 347 | + "TLSv1_2", None), |
331 | 348 | (SettingsParameters.StateFilePath, ConfigParameters.TABPY_STATE_PATH,
|
332 | 349 | os.path.join(pkg_path, "tabpy_server"), None),
|
333 | 350 | (SettingsParameters.StaticPath, ConfigParameters.TABPY_STATIC_PATH,
|
|
0 commit comments