Skip to content

Commit 977c496

Browse files
committed
Changing the default value for ssl_check_hostname to True, to ensure security validations are not skipped by default
1 parent 8faac60 commit 977c496

File tree

10 files changed

+42
-16
lines changed

10 files changed

+42
-16
lines changed

docs/examples/ssl_connection_examples.ipynb

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,10 @@
3434
"import redis\n",
3535
"\n",
3636
"r = redis.Redis(\n",
37-
" host='localhost', \n",
38-
" port=6666, \n",
39-
" ssl=True, \n",
37+
" host='localhost',\n",
38+
" port=6666,\n",
39+
" ssl=True,\n",
40+
" ssl_check_hostname=False,\n",
4041
" ssl_cert_reqs=\"none\",\n",
4142
")\n",
4243
"r.ping()"
@@ -68,7 +69,7 @@
6869
"source": [
6970
"import redis\n",
7071
"\n",
71-
"r = redis.from_url(\"rediss://localhost:6666?ssl_cert_reqs=none&decode_responses=True&health_check_interval=2\")\n",
72+
"r = redis.from_url(\"rediss://localhost:6666?ssl_cert_reqs=none&ssl_check_hostname=False&decode_responses=True&health_check_interval=2\")\n",
7273
"r.ping()"
7374
]
7475
},
@@ -99,13 +100,14 @@
99100
"import redis\n",
100101
"\n",
101102
"redis_pool = redis.ConnectionPool(\n",
102-
" host=\"localhost\", \n",
103-
" port=6666, \n",
104-
" connection_class=redis.SSLConnection, \n",
103+
" host=\"localhost\",\n",
104+
" port=6666,\n",
105+
" connection_class=redis.SSLConnection,\n",
106+
" ssl_check_hostname=False,\n",
105107
" ssl_cert_reqs=\"none\",\n",
106108
")\n",
107109
"\n",
108-
"r = redis.StrictRedis(connection_pool=redis_pool) \n",
110+
"r = redis.StrictRedis(connection_pool=redis_pool)\n",
109111
"r.ping()"
110112
]
111113
},
@@ -141,6 +143,7 @@
141143
" port=6666,\n",
142144
" ssl=True,\n",
143145
" ssl_min_version=ssl.TLSVersion.TLSv1_3,\n",
146+
" ssl_check_hostname=False,\n",
144147
" ssl_cert_reqs=\"none\",\n",
145148
")\n",
146149
"r.ping()"

redis/asyncio/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -241,7 +241,7 @@ def __init__(
241241
ssl_cert_reqs: Union[str, VerifyMode] = "required",
242242
ssl_ca_certs: Optional[str] = None,
243243
ssl_ca_data: Optional[str] = None,
244-
ssl_check_hostname: bool = False,
244+
ssl_check_hostname: bool = True,
245245
ssl_min_version: Optional[TLSVersion] = None,
246246
ssl_ciphers: Optional[str] = None,
247247
max_connections: Optional[int] = None,

redis/asyncio/cluster.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -280,7 +280,7 @@ def __init__(
280280
ssl_ca_data: Optional[str] = None,
281281
ssl_cert_reqs: Union[str, VerifyMode] = "required",
282282
ssl_certfile: Optional[str] = None,
283-
ssl_check_hostname: bool = False,
283+
ssl_check_hostname: bool = True,
284284
ssl_keyfile: Optional[str] = None,
285285
ssl_min_version: Optional[TLSVersion] = None,
286286
ssl_ciphers: Optional[str] = None,

redis/asyncio/connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -794,7 +794,7 @@ def __init__(
794794
ssl_cert_reqs: Union[str, ssl.VerifyMode] = "required",
795795
ssl_ca_certs: Optional[str] = None,
796796
ssl_ca_data: Optional[str] = None,
797-
ssl_check_hostname: bool = False,
797+
ssl_check_hostname: bool = True,
798798
ssl_min_version: Optional[TLSVersion] = None,
799799
ssl_ciphers: Optional[str] = None,
800800
**kwargs,

redis/client.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -223,7 +223,7 @@ def __init__(
223223
ssl_ca_certs: Optional[str] = None,
224224
ssl_ca_path: Optional[str] = None,
225225
ssl_ca_data: Optional[str] = None,
226-
ssl_check_hostname: bool = False,
226+
ssl_check_hostname: bool = True,
227227
ssl_password: Optional[str] = None,
228228
ssl_validate_ocsp: bool = False,
229229
ssl_validate_ocsp_stapled: bool = False,

redis/connection.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1028,7 +1028,7 @@ def __init__(
10281028
ssl_cert_reqs="required",
10291029
ssl_ca_certs=None,
10301030
ssl_ca_data=None,
1031-
ssl_check_hostname=False,
1031+
ssl_check_hostname=True,
10321032
ssl_ca_path=None,
10331033
ssl_password=None,
10341034
ssl_validate_ocsp=False,

tests/test_asyncio/test_cluster.py

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3118,7 +3118,9 @@ async def test_ssl_with_invalid_cert(
31183118
async def test_ssl_connection(
31193119
self, create_client: Callable[..., Awaitable[RedisCluster]]
31203120
) -> None:
3121-
async with await create_client(ssl=True, ssl_cert_reqs="none") as rc:
3121+
async with await create_client(
3122+
ssl=True, ssl_check_hostname=False, ssl_cert_reqs="none"
3123+
) as rc:
31223124
assert await rc.ping()
31233125

31243126
@pytest.mark.parametrize(
@@ -3134,6 +3136,7 @@ async def test_ssl_connection_tls12_custom_ciphers(
31343136
) -> None:
31353137
async with await create_client(
31363138
ssl=True,
3139+
ssl_check_hostname=False,
31373140
ssl_cert_reqs="none",
31383141
ssl_min_version=ssl.TLSVersion.TLSv1_2,
31393142
ssl_ciphers=ssl_ciphers,
@@ -3145,6 +3148,7 @@ async def test_ssl_connection_tls12_custom_ciphers_invalid(
31453148
) -> None:
31463149
async with await create_client(
31473150
ssl=True,
3151+
ssl_check_hostname=False,
31483152
ssl_cert_reqs="none",
31493153
ssl_min_version=ssl.TLSVersion.TLSv1_2,
31503154
ssl_ciphers="foo:bar",
@@ -3166,6 +3170,7 @@ async def test_ssl_connection_tls13_custom_ciphers(
31663170
# TLSv1.3 does not support changing the ciphers
31673171
async with await create_client(
31683172
ssl=True,
3173+
ssl_check_hostname=False,
31693174
ssl_cert_reqs="none",
31703175
ssl_min_version=ssl.TLSVersion.TLSv1_2,
31713176
ssl_ciphers=ssl_ciphers,
@@ -3181,6 +3186,7 @@ async def test_validating_self_signed_certificate(
31813186
ssl=True,
31823187
ssl_ca_certs=self.ca_cert,
31833188
ssl_cert_reqs="required",
3189+
ssl_check_hostname=False,
31843190
ssl_certfile=self.client_cert,
31853191
ssl_keyfile=self.client_key,
31863192
) as rc:
@@ -3196,6 +3202,7 @@ async def test_validating_self_signed_string_certificate(
31963202
ssl=True,
31973203
ssl_ca_data=cert_data,
31983204
ssl_cert_reqs="required",
3205+
ssl_check_hostname=False,
31993206
ssl_certfile=self.client_cert,
32003207
ssl_keyfile=self.client_key,
32013208
) as rc:

tests/test_asyncio/test_connect.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ async def test_tcp_ssl_tls12_custom_ciphers(tcp_address, ssl_ciphers):
6868
socket_timeout=10,
6969
ssl_min_version=ssl.TLSVersion.TLSv1_2,
7070
ssl_ciphers=ssl_ciphers,
71+
ssl_check_hostname=False,
7172
)
7273
await _assert_connect(
7374
conn, tcp_address, certfile=server_certs.certfile, keyfile=server_certs.keyfile
@@ -95,12 +96,16 @@ async def test_tcp_ssl_connect(tcp_address, ssl_min_version):
9596
host=host,
9697
port=port,
9798
client_name=_CLIENT_NAME,
99+
ssl_check_hostname=False,
98100
ssl_ca_certs=server_certs.ca_certfile,
99101
socket_timeout=10,
100102
ssl_min_version=ssl_min_version,
101103
)
102104
await _assert_connect(
103-
conn, tcp_address, certfile=server_certs.certfile, keyfile=server_certs.keyfile
105+
conn,
106+
tcp_address,
107+
certfile=server_certs.certfile,
108+
keyfile=server_certs.keyfile,
104109
)
105110
await conn.disconnect()
106111

tests/test_connect.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ def test_tcp_ssl_connect(tcp_address, ssl_min_version):
5858
conn = SSLConnection(
5959
host=host,
6060
port=port,
61+
ssl_check_hostname=False,
6162
client_name=_CLIENT_NAME,
6263
ssl_ca_certs=server_certs.ca_certfile,
6364
socket_timeout=10,
@@ -90,6 +91,7 @@ def test_tcp_ssl_tls12_custom_ciphers(tcp_address, ssl_ciphers):
9091
socket_timeout=10,
9192
ssl_min_version=ssl.TLSVersion.TLSv1_2,
9293
ssl_ciphers=ssl_ciphers,
94+
ssl_check_hostname=False,
9395
)
9496
_assert_connect(
9597
conn, tcp_address, certfile=server_certs.certfile, keyfile=server_certs.keyfile

tests/test_ssl.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,13 @@ def test_ssl_with_invalid_cert(self, request):
3737
def test_ssl_connection(self, request):
3838
ssl_url = request.config.option.redis_ssl_url
3939
p = urlparse(ssl_url)[1].split(":")
40-
r = redis.Redis(host=p[0], port=p[1], ssl=True, ssl_cert_reqs="none")
40+
r = redis.Redis(
41+
host=p[0],
42+
port=p[1],
43+
ssl=True,
44+
ssl_check_hostname=False,
45+
ssl_cert_reqs="none",
46+
)
4147
assert r.ping()
4248
r.close()
4349

@@ -98,6 +104,7 @@ def test_ssl_connection_tls12_custom_ciphers(self, request, ssl_ciphers):
98104
host=p[0],
99105
port=p[1],
100106
ssl=True,
107+
ssl_check_hostname=False,
101108
ssl_cert_reqs="none",
102109
ssl_min_version=ssl.TLSVersion.TLSv1_3,
103110
ssl_ciphers=ssl_ciphers,
@@ -112,6 +119,7 @@ def test_ssl_connection_tls12_custom_ciphers_invalid(self, request):
112119
host=p[0],
113120
port=p[1],
114121
ssl=True,
122+
ssl_check_hostname=False,
115123
ssl_cert_reqs="none",
116124
ssl_min_version=ssl.TLSVersion.TLSv1_2,
117125
ssl_ciphers="foo:bar",
@@ -136,6 +144,7 @@ def test_ssl_connection_tls13_custom_ciphers(self, request, ssl_ciphers):
136144
host=p[0],
137145
port=p[1],
138146
ssl=True,
147+
ssl_check_hostname=False,
139148
ssl_cert_reqs="none",
140149
ssl_min_version=ssl.TLSVersion.TLSv1_2,
141150
ssl_ciphers=ssl_ciphers,

0 commit comments

Comments
 (0)