|
1 | 1 | import asyncio
|
2 | 2 | import binascii
|
3 | 3 | import datetime
|
| 4 | +import ssl |
4 | 5 | import warnings
|
5 | 6 | from typing import Any, Awaitable, Callable, Dict, List, Optional, Type, Union
|
6 | 7 | from urllib.parse import urlparse
|
@@ -2961,6 +2962,59 @@ async def test_ssl_connection(
|
2961 | 2962 | async with await create_client(ssl=True, ssl_cert_reqs="none") as rc:
|
2962 | 2963 | assert await rc.ping()
|
2963 | 2964 |
|
| 2965 | + @pytest.mark.parametrize( |
| 2966 | + "ssl_ciphers", |
| 2967 | + [ |
| 2968 | + "AES256-SHA:DHE-RSA-AES256-SHA:AES128-SHA:DHE-RSA-AES128-SHA", |
| 2969 | + "ECDHE-ECDSA-AES256-GCM-SHA384", |
| 2970 | + "ECDHE-RSA-AES128-GCM-SHA256", |
| 2971 | + ], |
| 2972 | + ) |
| 2973 | + async def test_ssl_connection_tls12_custom_ciphers( |
| 2974 | + self, ssl_ciphers, create_client: Callable[..., Awaitable[RedisCluster]] |
| 2975 | + ) -> None: |
| 2976 | + async with await create_client( |
| 2977 | + ssl=True, |
| 2978 | + ssl_cert_reqs="none", |
| 2979 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 2980 | + ssl_ciphers=ssl_ciphers, |
| 2981 | + ) as rc: |
| 2982 | + assert await rc.ping() |
| 2983 | + |
| 2984 | + async def test_ssl_connection_tls12_custom_ciphers_invalid( |
| 2985 | + self, create_client: Callable[..., Awaitable[RedisCluster]] |
| 2986 | + ) -> None: |
| 2987 | + async with await create_client( |
| 2988 | + ssl=True, |
| 2989 | + ssl_cert_reqs="none", |
| 2990 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 2991 | + ssl_ciphers="foo:bar", |
| 2992 | + ) as rc: |
| 2993 | + with pytest.raises(RedisClusterException) as e: |
| 2994 | + assert await rc.ping() |
| 2995 | + assert "Redis Cluster cannot be connected" in str(e.value) |
| 2996 | + |
| 2997 | + @pytest.mark.parametrize( |
| 2998 | + "ssl_ciphers", |
| 2999 | + [ |
| 3000 | + "TLS_CHACHA20_POLY1305_SHA256", |
| 3001 | + "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256", |
| 3002 | + ], |
| 3003 | + ) |
| 3004 | + async def test_ssl_connection_tls13_custom_ciphers( |
| 3005 | + self, ssl_ciphers, create_client: Callable[..., Awaitable[RedisCluster]] |
| 3006 | + ) -> None: |
| 3007 | + # TLSv1.3 does not support changing the ciphers |
| 3008 | + async with await create_client( |
| 3009 | + ssl=True, |
| 3010 | + ssl_cert_reqs="none", |
| 3011 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 3012 | + ssl_ciphers=ssl_ciphers, |
| 3013 | + ) as rc: |
| 3014 | + with pytest.raises(RedisClusterException) as e: |
| 3015 | + assert await rc.ping() |
| 3016 | + assert "Redis Cluster cannot be connected" in str(e.value) |
| 3017 | + |
2964 | 3018 | async def test_validating_self_signed_certificate(
|
2965 | 3019 | self, create_client: Callable[..., Awaitable[RedisCluster]]
|
2966 | 3020 | ) -> None:
|
|
0 commit comments