Python Pickle拒绝序列化芹菜报告内容不允许的内容:拒绝反序列化Pickle类型的不受信任内容

Python Pickle拒绝序列化芹菜报告内容不允许的内容:拒绝反序列化Pickle类型的不受信任内容,python,json,ssl,celery,pickle,Python,Json,Ssl,Celery,Pickle,我试图将一些python对象(除了datetime.datetime之外)放入rabbitmq队列中,主要是json可序列化的,因此使用pickle进行序列化 芹菜配置文件: CELERY_TASK_SERIALIZER = 'pickle' CELERY_RESULT_SERIALIZER = 'pickle' 它抛出了一个例外,说: File "/usr/local/lib/python2.7/dist-packages/kombu/serialization.py", line 174

我试图将一些python对象(除了datetime.datetime之外)放入rabbitmq队列中,主要是json可序列化的,因此使用pickle进行序列化

芹菜配置文件:

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
来使用密钥获得安全连接

您可以通过向以下机构注册“密钥”和“证书”来激活消息签名:

至于这些东西意味着什么…以及它是如何工作的,请参见:

此外,有关如何生成密钥(以及启用安全无密码登录),请参阅:
或者这里引用的更一般的链接。

重复?嘿,安迪,我已经用上面的解决方案检查过了,没有任何区别。不幸的是,我无法评论和询问我对它的怀疑,因为我是新手。顺便说一句,上面的答案建议将序列化程序作为json,这在我的情况下不起作用。太好了!(或者不是很好,取决于你如何看待事情),这里提问的最高技巧:说出你尝试过的事情和发生的事情(例如,这不起作用)+谢谢你的尝试!谢谢你的提示,Andy。下次我会做。我甚至尝试过创建私钥和生成ssl证书之类的两件事,但都没有成功。我被困在这件事上了。芹菜的链接更新为:这个答案的问题是,启用ssl消息签名无法将复杂对象作为任务交付参数,如芹菜4.3.0。
auth
序列化程序在下面使用
json
,而不是
pickle
。强制它使用
pickle
作为传输将在反序列化时失败,因为工作者无法正确解码它。
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()