Skip to content

Commit 8d2598c

Browse files
committed
Expose ssl context params
1 parent 9922d44 commit 8d2598c

File tree

1 file changed

+31
-12
lines changed

1 file changed

+31
-12
lines changed

aiomisc/service/tls.py

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,19 @@
1717
log = logging.getLogger(__name__)
1818

1919

20+
DEFAULT_SSL_CIPHERS = (
21+
"ECDHE-RSA-AES256-GCM-SHA384",
22+
"ECDHE-ECDSA-AES256-GCM-SHA384",
23+
"ECDHE-RSA-CHACHA20-POLY1305",
24+
"ECDHE-ECDSA-CHACHA20-POLY1305",
25+
"ECDHE-RSA-AES128-GCM-SHA256",
26+
"ECDHE-ECDSA-AES128-GCM-SHA256",
27+
)
28+
29+
DEFAULT_SSL_MIN_VERSION = ssl.TLSVersion.TLSv1_3
30+
DEFAULT_SSL_MAX_VERSION = ssl.TLSVersion.TLSv1_3
31+
32+
2033
@dataclass(frozen=True)
2134
class SSLOptionsBase:
2235
cert: Optional[Path]
@@ -25,23 +38,19 @@ class SSLOptionsBase:
2538
verify: bool
2639
require_client_cert: bool
2740
purpose: ssl.Purpose
28-
minimum_version: ssl.TLSVersion = ssl.TLSVersion.TLSv1_3
29-
maximum_version: ssl.TLSVersion = ssl.TLSVersion.TLSv1_3
30-
ciphers: Tuple[str, ...] = (
31-
"ECDHE-RSA-AES256-GCM-SHA384",
32-
"ECDHE-ECDSA-AES256-GCM-SHA384",
33-
"ECDHE-RSA-CHACHA20-POLY1305",
34-
"ECDHE-ECDSA-CHACHA20-POLY1305",
35-
"ECDHE-RSA-AES128-GCM-SHA256",
36-
"ECDHE-ECDSA-AES128-GCM-SHA256",
37-
)
41+
minimum_version: ssl.TLSVersion = DEFAULT_SSL_MIN_VERSION
42+
maximum_version: ssl.TLSVersion = DEFAULT_SSL_MAX_VERSION
43+
ciphers: Tuple[str, ...] = DEFAULT_SSL_CIPHERS
3844

3945

4046
class SSLOptions(SSLOptionsBase):
4147
def __init__(
4248
self, cert: Optional[PathOrStr], key: Optional[PathOrStr],
4349
ca: Optional[PathOrStr], verify: bool, require_client_cert: bool,
4450
purpose: ssl.Purpose,
51+
minimum_version: ssl.TLSVersion = DEFAULT_SSL_MIN_VERSION,
52+
maximum_version: ssl.TLSVersion = DEFAULT_SSL_MAX_VERSION,
53+
ciphers: Tuple[str, ...] = DEFAULT_SSL_CIPHERS,
4554
) -> None:
4655
super().__init__(
4756
cert=Path(cert) if cert else None,
@@ -50,6 +59,9 @@ def __init__(
5059
verify=verify,
5160
require_client_cert=require_client_cert,
5261
purpose=purpose,
62+
minimum_version=minimum_version,
63+
maximum_version=maximum_version,
64+
ciphers=ciphers,
5365
)
5466

5567
def create_context(self) -> ssl.SSLContext:
@@ -99,13 +111,20 @@ def __init__(
99111
self, *, address: Optional[str] = None, port: Optional[int] = None,
100112
cert: PathOrStr, key: PathOrStr, ca: Optional[PathOrStr] = None,
101113
require_client_cert: bool = False, verify: bool = True,
114+
minimum_version: ssl.TLSVersion = DEFAULT_SSL_MIN_VERSION,
115+
maximum_version: ssl.TLSVersion = DEFAULT_SSL_MAX_VERSION,
116+
ciphers: Tuple[str, ...] = DEFAULT_SSL_CIPHERS,
102117
options: OptionsType = (), sock: Optional[socket.socket] = None,
103118
**kwargs: Any,
104119
):
105120

106121
self.__ssl_options = SSLOptions(
107-
cert, key, ca, verify, require_client_cert,
108-
ssl.Purpose.CLIENT_AUTH,
122+
cert=cert, key=key, ca=ca, verify=verify,
123+
require_client_cert=require_client_cert,
124+
purpose=ssl.Purpose.CLIENT_AUTH,
125+
minimum_version=minimum_version,
126+
maximum_version=maximum_version,
127+
ciphers=ciphers,
109128
)
110129

111130
if not sock:

0 commit comments

Comments
 (0)