|
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
|
@@ -2951,6 +2952,59 @@ async def test_ssl_connection(
|
2951 | 2952 | async with await create_client(ssl=True, ssl_cert_reqs="none") as rc:
|
2952 | 2953 | assert await rc.ping()
|
2953 | 2954 |
|
| 2955 | + @pytest.mark.parametrize( |
| 2956 | + "ssl_ciphers", |
| 2957 | + [ |
| 2958 | + "AES256-SHA:DHE-RSA-AES256-SHA:AES128-SHA:DHE-RSA-AES128-SHA", |
| 2959 | + "ECDHE-ECDSA-AES256-GCM-SHA384", |
| 2960 | + "ECDHE-RSA-AES128-GCM-SHA256", |
| 2961 | + ], |
| 2962 | + ) |
| 2963 | + async def test_ssl_connection_tls12_custom_ciphers( |
| 2964 | + self, ssl_ciphers, create_client: Callable[..., Awaitable[RedisCluster]] |
| 2965 | + ) -> None: |
| 2966 | + async with await create_client( |
| 2967 | + ssl=True, |
| 2968 | + ssl_cert_reqs="none", |
| 2969 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 2970 | + ssl_ciphers=ssl_ciphers, |
| 2971 | + ) as rc: |
| 2972 | + assert await rc.ping() |
| 2973 | + |
| 2974 | + async def test_ssl_connection_tls12_custom_ciphers_invalid( |
| 2975 | + self, create_client: Callable[..., Awaitable[RedisCluster]] |
| 2976 | + ) -> None: |
| 2977 | + async with await create_client( |
| 2978 | + ssl=True, |
| 2979 | + ssl_cert_reqs="none", |
| 2980 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 2981 | + ssl_ciphers="foo:bar", |
| 2982 | + ) as rc: |
| 2983 | + with pytest.raises(RedisClusterException) as e: |
| 2984 | + assert await rc.ping() |
| 2985 | + assert "Redis Cluster cannot be connected" in str(e.value) |
| 2986 | + |
| 2987 | + @pytest.mark.parametrize( |
| 2988 | + "ssl_ciphers", |
| 2989 | + [ |
| 2990 | + "TLS_CHACHA20_POLY1305_SHA256", |
| 2991 | + "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256", |
| 2992 | + ], |
| 2993 | + ) |
| 2994 | + async def test_ssl_connection_tls13_custom_ciphers( |
| 2995 | + self, ssl_ciphers, create_client: Callable[..., Awaitable[RedisCluster]] |
| 2996 | + ) -> None: |
| 2997 | + # TLSv1.3 does not support changing the ciphers |
| 2998 | + async with await create_client( |
| 2999 | + ssl=True, |
| 3000 | + ssl_cert_reqs="none", |
| 3001 | + ssl_min_version=ssl.TLSVersion.TLSv1_2, |
| 3002 | + ssl_ciphers=ssl_ciphers, |
| 3003 | + ) as rc: |
| 3004 | + with pytest.raises(RedisClusterException) as e: |
| 3005 | + assert await rc.ping() |
| 3006 | + assert "Redis Cluster cannot be connected" in str(e.value) |
| 3007 | + |
2954 | 3008 | async def test_validating_self_signed_certificate(
|
2955 | 3009 | self, create_client: Callable[..., Awaitable[RedisCluster]]
|
2956 | 3010 | ) -> None:
|
|
0 commit comments