Celery - RabbitMQ 即服务 - 代理安全连接 (TSL/SSL) - 消息签名

rar*_*iru 5 security ssl amqp rabbitmq celery

我正在尝试在我的 Django Web 服务器上安全地配置Celery,我可以找出两种实现此目的的替代方法。保护代理或签署消息。

  • Celery,需要一个消息代理,在这种情况下是RabbitMQ

    我正在使用“RabbitMQ 即服务”实现,这意味着使用amqp协议通过互联网访问 RabbitMQ 服务器。

    服务商分发了一个amqp uri,同时也支持 amqps:

    “amqps”URI 方案用于指示客户端与服务器建立安全连接。

    • 显然,这就是我所需要的,否则我所有的消息都会在网络上传播,赤裸裸地在电线上。

    为了使用 amqps,celery 需要以下配置

    import ssl
    
    BROKER_USE_SSL = {
      'keyfile': '/var/ssl/private/worker-key.pem',
      'certfile': '/var/ssl/amqp-server-cert.pem',
      'ca_certs': '/var/ssl/myca.pem',
      'cert_reqs': ssl.CERT_REQUIRED
    }
    
    Run Code Online (Sandbox Code Playgroud)

    问题: 在哪里可以找到这些.pem文件?

    根据RabbitMQ docs,我必须自己创建它们并配置 RabbitMQ 服务器以使用它们。

    但是,我没有运行服务器。如上所述,我有一个支持 amqps 的“RabbitMQ 即服务”提供者。我应该让他给我提供那些.pem文件吗?

  • 芹菜,也可以签名消息

    (尝试这种方法,我收到了我报告No encoder installed for auth错误。)

    问题:这是否意味着我可以使用我的证书来保护连接作为替代配置BROKER_USE_SSL

    还有一个关于消息签名的说明:

    auth 序列化程序不会加密消息的内容,因此如果需要,必须单独启用它。

    子问题:加密消息的内容是否可以保护我免受“当前”RabbitMQ 服务器管理员的影响,而“消息签名”仅在连接到该服务器时保护我?

显然我有点困惑,但我不希望出于任何原因在互联网上创建任何类型的不安全流量。我会很感激你的帮助。

Lov*_*son 5

配置CloudAMQP 时,您需要将 BROKER_USE_SSL 设置为 True 和 BROKER_URL 如下所示:

BROKER_USE_SSL = True

BROKER_URL = 'amqp://user:pass@hostname:5671/vhost'

注意端口号 5671,并保留“amqp”。