a
This commit is contained in:
parent
be8b24575b
commit
39bd335ee7
|
|
@ -4,7 +4,6 @@ Redis 缓存管理器 - 支持 TLS 连接
|
|||
import json
|
||||
import logging
|
||||
from typing import Optional, Any, Dict, List
|
||||
import ssl
|
||||
|
||||
try:
|
||||
# 使用 redis-py 4.2+ 的异步客户端(替代 aioredis)
|
||||
|
|
@ -98,28 +97,28 @@ class RedisCache:
|
|||
# 构建连接参数
|
||||
connection_kwargs = {}
|
||||
|
||||
# 如果使用 TLS
|
||||
# 如果使用 TLS(redis-py的异步客户端使用特定的SSL参数,而不是ssl上下文)
|
||||
if self.use_tls or self.redis_url.startswith('rediss://'):
|
||||
# 配置 SSL 上下文
|
||||
ssl_context = ssl.create_default_context()
|
||||
# redis-py的异步客户端不支持直接传递ssl上下文
|
||||
# 而是使用ssl_cert_reqs、ssl_ca_certs等参数
|
||||
# 当URL是rediss://时,redis-py会自动启用SSL
|
||||
|
||||
# 设置证书验证要求
|
||||
if self.ssl_cert_reqs == 'none':
|
||||
ssl_context.check_hostname = False
|
||||
ssl_context.verify_mode = ssl.CERT_NONE
|
||||
elif self.ssl_cert_reqs == 'optional':
|
||||
ssl_context.check_hostname = False
|
||||
ssl_context.verify_mode = ssl.CERT_OPTIONAL
|
||||
else: # required
|
||||
ssl_context.check_hostname = True
|
||||
ssl_context.verify_mode = ssl.CERT_REQUIRED
|
||||
# 设置证书验证要求(字符串格式:'required', 'optional', 'none')
|
||||
connection_kwargs['ssl_cert_reqs'] = self.ssl_cert_reqs
|
||||
|
||||
# 如果提供了 CA 证书路径
|
||||
if self.ssl_ca_certs:
|
||||
ssl_context.load_verify_locations(self.ssl_ca_certs)
|
||||
connection_kwargs['ssl_ca_certs'] = self.ssl_ca_certs
|
||||
|
||||
connection_kwargs['ssl'] = ssl_context
|
||||
logger.info(f"使用 TLS 连接 Redis: {self.redis_url}")
|
||||
# 设置主机名验证(根据ssl_cert_reqs自动设置,但可以显式指定)
|
||||
if self.ssl_cert_reqs == 'none':
|
||||
connection_kwargs['ssl_check_hostname'] = False
|
||||
elif self.ssl_cert_reqs == 'required':
|
||||
connection_kwargs['ssl_check_hostname'] = True
|
||||
else: # optional
|
||||
connection_kwargs['ssl_check_hostname'] = False
|
||||
|
||||
logger.info(f"使用 TLS 连接 Redis: {self.redis_url} (ssl_cert_reqs={self.ssl_cert_reqs})")
|
||||
|
||||
# 如果 URL 中不包含用户名和密码,且提供了独立的用户名和密码参数,则添加到连接参数中
|
||||
# 注意:如果 URL 中已经包含认证信息(如 redis://user:pass@host:port),则优先使用 URL 中的
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user