ssl - 在集群模式下访问AWS elasticache redis时出错)+从django服务启用TLS

标签 ssl redis amazon-elasticache django-cache django-redis

我正在尝试连接启用了 TLS 的 AWS elasticache(集群模式下的 redis),库版本和 django 缓存设置如下

====Dependencies======
redis==3.0.0
redis-py-cluster==2.0.0
django-redis==4.11.0

======settings=======
CACHES = {
    'default': {
        'BACKEND': 'django_redis.cache.RedisCache',
        'LOCATION': "redis://xxxxxxx.mc-redis-cache-v2.zzzzz.usw2.cache.amazonaws.com:6379/0",
        'OPTIONS': {
            'PASSWORD': '<password>',
            'REDIS_CLIENT_CLASS': 'rediscluster.RedisCluster',
            'CONNECTION_POOL_CLASS': 'rediscluster.connection.ClusterConnectionPool',
            'CONNECTION_POOL_KWARGS': {
                'skip_full_coverage_check': True,
                "ssl_cert_reqs": False,
                "ssl": True
            }
        }
    }
}

这似乎不是客户端类的问题(由redis-py-cluster提供),因为我能够访问

from rediscluster import RedisCluster
startup_nodes = [{"host": "redis://xxxxxxx.mc-redis-cache-v2.zzzzz.usw2.cache.amazonaws.com", "port": "6379"}]

rc = RedisCluster(startup_nodes=startup_nodes, ssl=True, ssl_cert_reqs=False, decode_responses=True, skip_full_coverage_check=True, password='<password>')

rc.set("foo", "bar")
rc.get('foo')
'bar'

但是当 django 服务尝试访问缓存时,我看到此错误,是否有我可能缺少的配置详细信息?

File "/usr/lib/python3.6/site-packages/django_redis/cache.py", line 32, in _decorator
    return method(self, *args, **kwargs)
  File "/usr/lib/python3.6/site-packages/django_redis/cache.py", line 81, in get
    client=client)
  File "/usr/lib/python3.6/site-packages/django_redis/client/default.py", line 194, in get
    client = self.get_client(write=False)
  File "/usr/lib/python3.6/site-packages/django_redis/client/default.py", line 90, in get_client
    self._clients[index] = self.connect(index)
  File "/usr/lib/python3.6/site-packages/django_redis/client/default.py", line 103, in connect
    return self.connection_factory.connect(self._server[index])
  File "/usr/lib/python3.6/site-packages/django_redis/pool.py", line 64, in connect
    connection = self.get_connection(params)
  File "/usr/lib/python3.6/site-packages/django_redis/pool.py", line 75, in get_connection
    pool = self.get_or_create_connection_pool(params)
  File "/usr/lib/python3.6/site-packages/django_redis/pool.py", line 94, in get_or_create_connection_pool
    self._pools[key] = self.get_connection_pool(params)
  File "/usr/lib/python3.6/site-packages/django_redis/pool.py", line 107, in get_connection_pool
    pool = self.pool_cls.from_url(**cp_params)
  File "/usr/lib/python3.6/site-packages/redis/connection.py", line 916, in from_url
    return cls(**kwargs)
  File "/usr/lib/python3.6/site-packages/rediscluster/connection.py", line 146, in __init__
    self.nodes.initialize()
  File "/usr/lib/python3.6/site-packages/rediscluster/nodemanager.py", line 172, in initialize
    raise RedisClusterException("ERROR sending 'cluster slots' command to redis server: {0}".format(node))
rediscluster.exceptions.RedisClusterException: ERROR sending 'cluster slots' command to redis server: {'host': 'xxxxxxx.mc-redis-cache-v2.zzzzz.usw2.cache.amazonaws.com', 'port': '6379'}

我还尝试将 "ssl_ca_certs": "/etc/ssl/certs/ca-certificates.crt" 传递给 CONNECTION_POOL_KWARGS 并将位置方案设置为 rediss 仍然没有运气

最佳答案

您需要将 ssl_cert_reqs=False 更改为 ssl_cert_reqs=None

这是指向此的 redis Python git 存储库的链接: https://github.com/andymccurdy/redis-py#ssl-connections

关于ssl - 在集群模式下访问AWS elasticache redis时出错)+从django服务启用TLS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61373368/

相关文章:

amazon-web-services - 如何使用类似于 beanstalkd 的 cli 将 Redis 作为队列引擎进行监控?

java - 击打: "Trust anchor for certification path not found"

node.js - 如何在 express 上配置 ssl

asp.net-mvc - ASP.NET MVC 中的 Google 和 Facebook OAuth2 提供程序是否需要 SSL 证书

python-3.x - 导入错误 : No module named 'asgiref.base_layer'

go - 从 Redis/Golang 客户端读取整个数据

java - 用于 EC2 实例中 session 管理的 Memcached session 管理器

更改使用站点 SSL 证书后 ASP.NET Web 服务调用失败

javascript - 带有 sinon 返回函数的 stub 函数?

amazon-web-services - AWS ElastiCache 中的每个 REDIS 集群可以有 1 个以上的节点吗?