我试图将一些主要是 json 可序列化的 python 对象(除了 datetime.datetime )放入rabbitmq队列中,因此使用pickle进行序列化。
celery_config 文件:
CELERY_TASK_SERIALIZER = 'pickle'
CELERY_RESULT_SERIALIZER = 'pickle'
它抛出一个异常:
File "/usr/local/lib/python2.7/dist-packages/kombu/serialization.py", line 174, in loads
raise self._for_untrusted_content(content_type, 'untrusted')
ContentDisallowed: Refusing to deserialize untrusted content of type pickle (application/x-python-serialize)
这个链接 建议我进行消息签名,但我对此一无所知。
有人可以指导我如何解决吗?
你尝试过吗,这个:
CELERY_ACCEPT_CONTENT = ['pickle']
如本链接所示,此设置接受序列化程序名称和内容类型的列表,因此您可以将序列化程序或您希望序列化的内容类型列入白名单。
因此,要么执行上述操作,要么使用 SSL 消息签名......这基本上是构建 ssh 密钥对,并启用
celery
使用您的密钥来获得安全连接。
您可以通过以下方式注册您的“密钥”和“证书”来激活消息签名:
CELERY_SECURITY_KEY = '/etc/ssl/private/worker.key'
CELERY_SECURITY_CERTIFICATE = '/etc/ssl/certs/worker.pem'
CELERY_SECURITY_CERT_STORE = '/etc/ssl/certs/*.pem'
from celery.security import setup_security
setup_security()
至于这些东西的含义……以及它是如何工作的,请参阅: http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html
此外,有关如何生成密钥(并启用安全无密码登录),请参阅: https://help.github.com/articles/generate-ssh-keys/ 或 http://mah.everybody.org/docs/ssh 以获取其中引用的更一般链接。