2014-12-20 5 views
8

Rabbitmq kuyruğunda datetime.datetime dışında bazı python nesnelerini çoğunlukla jsonunu serileştirmeye çalışıyorum ve serileştirmek için turşu kullanıyorum.Pickle, Kereviz raporlama ile içerik serileştirmeyi reddediyor ContentDisallowed: Type turtle'ın güvenilmeyen içeriğini desterize etmeyi reddetme

celery_config dosyası:

CELERY_TASK_SERIALIZER = 'pickle' 
CELERY_RESULT_SERIALIZER = 'pickle' 

Bir istisna diyerek atıyor:

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) 

This link ben mesajı hangi hiçbir ipucu var imzalama yapmak öneriyor.

Birisi bana nasıl yardımcı olurum?

+0

http://stackoverflow.com/questions/6628016/how-to-disallow-pickle-serialization-in-celery kopyası? –

+0

Hey Andy, Yukarıdaki çözümü hiç fark etmeden kontrol ettim. Ne yazık ki, yorum yapamayacağımı ve şüphelerimi sorgulayamayacağımı söyleyemem. Btw'nin en iyi yanıtı, benim durumumda çalışmayacak olan jumper'ı serpiştirmeyi önerir. – andros1337

+0

harika! (ya da şeylere nasıl baktığınıza bağlı olarak büyük değil), burada soru sormak için en iyi ipucu: denediğiniz şeyi ve ne olduğunu söyleyin (örneğin, bu işe yaramadı)! Denemek için +1! –

cevap

15

Bunu, denediniz: Bu linkte belirtildiği gibi

CELERY_ACCEPT_CONTENT = ['pickle'] 

(http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-accept_content) bu ayar serileştirici isimleri ve içerik türlerinin bir listesini kabul eder, böylece olabilir beyaz liste serileştirici ya ya serileştirmeyi beklediğiniz içerik türleri.

Yani ya yukarıdakileri yapın ya da temel olarak bir ssh-anahtar çifti oluşturun ve güvenli bir bağlantı elde etmek için anahtarlarınızı kullanmak için celery'u etkinleştirin.

Sen "KEY" ve "SERTİFİKA" kaydederek mesajı imzalama, etkinleştirebilirsiniz: Bildiğim kadarıyla bu şeyler ne anlama olarak

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() 

... ve nasıl çalıştığı, bkz: http://www.tldp.org/HOWTO/SSL-Certificates-HOWTO/x64.html

Ayrıca, anahtarların nasıl üretileceği (ve güvenli parolasız girişlerin etkinleştirileceği) için, burada daha genel bağlantılar için bkz: https://help.github.com/articles/generating-ssh-keys/ veya http://mah.everybody.org/docs/ssh.

+0

CELERY_ACCEPT_CONTENT için bu bağlantıya güncellendi: http://docs.celeryproject.org/en/latest/userguide/configuration.html#std:setting-accept_content –