web-dev-qa-db-ja.com

Pickleは、セロリレポートを使用したコンテンツのシリアル化を拒否していますContentDisallowed:タイプpickleの信頼できないコンテンツの逆シリアル化を拒否しています

私はいくつかのpythonオブジェクトをrabbitmqキューにdatetime.datetimeを除いてほとんどjsonでシリアル化できるようにしようとしているので、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)

このリンク は、私が手がかりのないメッセージ署名を行うことを示唆しています。

誰かが私にそれを解決する方法を教えてもらえますか?

17
andros1337

これを試しましたか:

CELERY_ACCEPT_CONTENT = ['pickle']

このリンクに示されているように( http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-accept_content )この設定は、シリアライザーの名前とコンテンツのリストを受け入れます-タイプなので、シリアライザーまたはシリアル化する予定のコンテンツタイプをホワイトリストに登録できます。

したがって、上記を実行するか、SSLメッセージ署名を使用します。これは基本的に、sshキーのペアを構築し、celeryがキーを使用して安全な接続を取得できるようにします。

「KEY」と「CERTIFICATE」を以下に登録することにより、メッセージ署名をアクティブ化できます。

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 ここで参照されているより一般的なリンク。

28
Mike McKerns