Skip to content

Commit ee54d2a

Browse files
authored
Support using ssl.VerifyMode enum for ssl_cert_reqs (#3346)
1 parent 55a50a2 commit ee54d2a

File tree

5 files changed

+13
-10
lines changed

5 files changed

+13
-10
lines changed

redis/asyncio/client.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -81,9 +81,10 @@
8181
)
8282

8383
if TYPE_CHECKING and SSL_AVAILABLE:
84-
from ssl import TLSVersion
84+
from ssl import TLSVersion, VerifyMode
8585
else:
8686
TLSVersion = None
87+
VerifyMode = None
8788

8889
PubSubHandler = Callable[[Dict[str, str]], Awaitable[None]]
8990
_KeyT = TypeVar("_KeyT", bound=KeyT)
@@ -228,7 +229,7 @@ def __init__(
228229
ssl: bool = False,
229230
ssl_keyfile: Optional[str] = None,
230231
ssl_certfile: Optional[str] = None,
231-
ssl_cert_reqs: str = "required",
232+
ssl_cert_reqs: Union[str, VerifyMode] = "required",
232233
ssl_ca_certs: Optional[str] = None,
233234
ssl_ca_data: Optional[str] = None,
234235
ssl_check_hostname: bool = False,

redis/asyncio/cluster.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -75,9 +75,10 @@
7575
)
7676

7777
if SSL_AVAILABLE:
78-
from ssl import TLSVersion
78+
from ssl import TLSVersion, VerifyMode
7979
else:
8080
TLSVersion = None
81+
VerifyMode = None
8182

8283
TargetNodesT = TypeVar(
8384
"TargetNodesT", str, "ClusterNode", List["ClusterNode"], Dict[Any, "ClusterNode"]
@@ -268,7 +269,7 @@ def __init__(
268269
ssl: bool = False,
269270
ssl_ca_certs: Optional[str] = None,
270271
ssl_ca_data: Optional[str] = None,
271-
ssl_cert_reqs: str = "required",
272+
ssl_cert_reqs: Union[str, VerifyMode] = "required",
272273
ssl_certfile: Optional[str] = None,
273274
ssl_check_hostname: bool = False,
274275
ssl_keyfile: Optional[str] = None,

redis/asyncio/connection.py

+5-4
Original file line numberDiff line numberDiff line change
@@ -768,7 +768,7 @@ def __init__(
768768
self,
769769
ssl_keyfile: Optional[str] = None,
770770
ssl_certfile: Optional[str] = None,
771-
ssl_cert_reqs: str = "required",
771+
ssl_cert_reqs: Union[str, ssl.VerifyMode] = "required",
772772
ssl_ca_certs: Optional[str] = None,
773773
ssl_ca_data: Optional[str] = None,
774774
ssl_check_hostname: bool = False,
@@ -842,7 +842,7 @@ def __init__(
842842
self,
843843
keyfile: Optional[str] = None,
844844
certfile: Optional[str] = None,
845-
cert_reqs: Optional[str] = None,
845+
cert_reqs: Optional[Union[str, ssl.VerifyMode]] = None,
846846
ca_certs: Optional[str] = None,
847847
ca_data: Optional[str] = None,
848848
check_hostname: bool = False,
@@ -855,7 +855,7 @@ def __init__(
855855
self.keyfile = keyfile
856856
self.certfile = certfile
857857
if cert_reqs is None:
858-
self.cert_reqs = ssl.CERT_NONE
858+
cert_reqs = ssl.CERT_NONE
859859
elif isinstance(cert_reqs, str):
860860
CERT_REQS = { # noqa: N806
861861
"none": ssl.CERT_NONE,
@@ -866,7 +866,8 @@ def __init__(
866866
raise RedisError(
867867
f"Invalid SSL Certificate Requirements Flag: {cert_reqs}"
868868
)
869-
self.cert_reqs = CERT_REQS[cert_reqs]
869+
cert_reqs = CERT_REQS[cert_reqs]
870+
self.cert_reqs = cert_reqs
870871
self.ca_certs = ca_certs
871872
self.ca_data = ca_data
872873
self.check_hostname = check_hostname

redis/client.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -211,7 +211,7 @@ def __init__(
211211
ssl: bool = False,
212212
ssl_keyfile: Optional[str] = None,
213213
ssl_certfile: Optional[str] = None,
214-
ssl_cert_reqs: str = "required",
214+
ssl_cert_reqs: Union[str, "ssl.VerifyMode"] = "required",
215215
ssl_ca_certs: Optional[str] = None,
216216
ssl_ca_path: Optional[str] = None,
217217
ssl_ca_data: Optional[str] = None,

redis/connection.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1017,7 +1017,7 @@ def __init__(
10171017
Args:
10181018
ssl_keyfile: Path to an ssl private key. Defaults to None.
10191019
ssl_certfile: Path to an ssl certificate. Defaults to None.
1020-
ssl_cert_reqs: The string value for the SSLContext.verify_mode (none, optional, required). Defaults to "required".
1020+
ssl_cert_reqs: The string value for the SSLContext.verify_mode (none, optional, required), or an ssl.VerifyMode. Defaults to "required".
10211021
ssl_ca_certs: The path to a file of concatenated CA certificates in PEM format. Defaults to None.
10221022
ssl_ca_data: Either an ASCII string of one or more PEM-encoded certificates or a bytes-like object of DER-encoded certificates.
10231023
ssl_check_hostname: If set, match the hostname during the SSL handshake. Defaults to False.

0 commit comments

Comments
 (0)