Hi all, hope you are all doing well.  Would someone be available to help me 
figure out how to connect with SSL using channels_redis? 

I made a web app using django channels + channels_redis and I'm having an 
issue with configuring SSL. (I want SSL because I have deployed the app to 
Google App Engine and I don't want users' messages unsecured.) I have a 
Redis instance on RedisLabs with SSL enabled and all the client certs 
needed, but I can't find where to plug them into my app settings. I 
searched the channels documentation and all the issues on the 
channels_redis GitHub page, but the only mention I found was here: 
https://github.com/django/channels_redis#symmetric_encryption_keys, "we 
advise you to also route your Redis connections over TLS for higher 
security."

I noticed that channels_redis/core.py imports aioredis, and the only 
function from aioredis, create_redis, is used in the function pop() here:
https://github.com/django/channels_redis/blob/243eb7e4ecfc2e922508e50210884d3c9bae5403/channels_redis/core.py#L71

aioredis however is able to use "ssl" as an argument when establishing the 
connection, which channels_redis is not using:
https://github.com/aio-libs/aioredis/blob/922ccfc839ae0a1927ef44e7522a726277bce8a5/aioredis/commands/__init__.py#L171

So, I'm thinking that in order to connect with SSL the channels_redis 
module would need a new feature where I could configure SSL in 
settings.py/CHANNEL_LAYERS, and then channels_redis would pass my SSL 
settings to the function create_redis.

I'm super new to the world of Django and Channels and Redis and also 
contributing to open source projects, so hopefully I haven't over or under 
explained anything. Including this information because it was mentioned in 
the channels_redis GitHub "Submit new issue" form:

   - OS: Windows 10
   - Runtime: Python 3.7
   - Browser: Google Chrome
   - requirements.txt file is attached
   - Expectations vs reality: Expected to find SSL config options in 
   home.settings.CHANNEL_LAYERS variable, but there appears to be none
   - How I'm running my project: Testing locally using runserver so far, 
   but also throwing same error using daphne
   - Error traceback attached ("ERR unencrypted connection is prohibited")
   

Am I missing something, or do you suggest I submit this as a new request 
somewhere?

Thank you!

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to django-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-users/f6865cca-8c60-4cd6-91c5-a49e70e2962bn%40googlegroups.com.
2021-01-19 17:58:37,041 - ERROR - server - Exception inside application: ERR 
unencrypted connection is prohibited
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels\sessions.py", 
line 175, in __call__
    return await self.inner(receive, self.send)
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels\middleware.py", 
line 41, in coroutine_call
    await inner_instance(receive, send)
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels\consumer.py", 
line 54, in __call__
    await await_many_dispatch([receive, self.channel_receive], self.dispatch)
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels\utils.py", line 
50, in await_many_dispatch
    await dispatch(result)
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels\consumer.py", 
line 67, in dispatch
    await handler(message)
  File "D:\projects\my_project\web_app\src\stories\consumers.py", line 40, in 
websocket_connect
    self.channel_name # default attribute
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels_redis\core.py", 
line 583, in group_add
    async with self.connection(self.consistent_hash(group)) as connection:
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels_redis\core.py", 
line 820, in __aenter__
    self.conn = await self.pool.pop()
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\channels_redis\core.py", 
line 70, in pop
    conns.append(await aioredis.create_redis(**self.host, loop=loop))
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\aioredis\commands\__init__.py",
 line 175, in create_redis
    loop=loop)
  File 
"D:\projects\my_project\web_app\env\lib\site-packages\aioredis\connection.py", 
line 133, in create_connection
    await conn.auth(password)
  File "D:\projects\my_project\web_app\env\lib\site-packages\aioredis\util.py", 
line 52, in wait_ok
    res = await fut
  ERR unencrypted connection is prohibited
aioredis==1.3.1
asgiref==2.3.2
async-timeout==3.0.1
attrs==20.3.0
autobahn==20.12.3
Automat==20.2.0
cffi==1.14.4
channels==2.1.2
channels-redis==2.3.2
constantly==15.1.0
cryptography==3.3.1
daphne==2.2.5
Django==2.0.7
et-xmlfile==1.0.1
hiredis==1.1.0
hyperlink==20.0.1
idna==2.10
incremental==17.5.0
jdcal==1.4.1
msgpack==0.5.6
numpy==1.19.5
openpyxl==3.0.6
pandas==1.2.0
Pillow==8.1.0
psycopg2==2.8.6
pyasn1==0.4.8
pyasn1-modules==0.2.8
pycparser==2.20
PyHamcrest==2.0.2
pyOpenSSL==20.0.1
python-dateutil==2.8.1
pytz==2018.5
redis==2.10.6
reportlab==3.5.59
service-identity==18.1.0
six==1.15.0
sqlparse==0.4.1
Twisted==20.3.0
txaio==20.12.1
zope.interface==5.2.0

Reply via email to