python - 如何使用 python pika 将 msg 发布到带有自签名证书的 rabbitmq 服务器?

标签 python ssl rabbitmq self-signed python-pika

parameters = pika.URLParameters('amqps://<user>:<pass>@<host>/<vhost>')
connection = pika.BlockingConnection(parameters)
channel = connection.channel()

我得到:ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1056)
我知道服务器有一个自签名证书。我错过了哪些步骤?

最佳答案

    ssl_enabled = settings["rabbitmq"].get("ssl", False)

    rabbitmq_user = settings["rabbitmq"]["user"]
    rabbitmq_password = settings["rabbitmq"]["password"]
    rabbitmq_server = settings["rabbitmq"]["server"]
    rabbitmq_vhost = settings["rabbitmq"]["vhost"]
    rabbitmq_exchange = settings["rabbitmq"]["exchange"]
    rabbitmq_queue = settings["rabbitmq"]["queue"]

    if ssl_enabled:
        context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)
        context.verify_mode = ssl.CERT_REQUIRED
        context.load_verify_locations(settings["rabbitmq"].get("ca_bundle", '/etc/pki/tls/certs/ca-bundle.crt'))
        ssl_options = pika.SSLOptions(context)
        port = settings["rabbitmq"].get("port", 5671)
    else:
        ssl_options = None
        port = settings["rabbitmq"].get("port", 5672)

    credentials = pika.credentials.PlainCredentials(
        username=rabbitmq_user, password=rabbitmq_password
    )
    connection_params = pika.ConnectionParameters(
        host=rabbitmq_server,
        ssl_options=ssl_options,
        port=port,
        credentials=credentials,
        virtual_host=rabbitmq_vhost,
        heartbeat=600,
        blocked_connection_timeout=300,
    )
    rabbit = pika.BlockingConnection(connection_params)
    channel = rabbit.channel()

    channel.exchange_declare(
        exchange=rabbitmq_exchange, exchange_type="direct", durable=True
    )
    channel.queue_declare(queue=rabbitmq_queue, durable=True)
    channel.queue_bind(
        exchange=rabbitmq_exchange, queue=rabbitmq_queue, routing_key=rabbitmq_queue
    )

    queue_properties = pika.BasicProperties(delivery_mode=2)

关于python - 如何使用 python pika 将 msg 发布到带有自签名证书的 rabbitmq 服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62031529/

相关文章:

python - 在 IPython 笔记本中请求密码

ssl - 让我们加密并开始

ssl - 将客户端证书插入 HTTPS POST 请求

c# - RabbitMQ 连接工厂在我的应用程序箱中找不到 System.Threading.Tasks.Extensions

rabbitmq - Rabbitmq 虚拟主题?

Python - 正则表达式 - 对日本地址进行排序

python - 来自 "ImportError: cannot import name ' 的变压器 : Error importing packages. 'torch.optim.lr_scheduler' SAVE_STATE_WARNING'

python - 传感器读取覆盆子数据

java - 服务器库存的 key 生成器

.net - 在发布方的 SimpleInjector for MassTransit 中建立队列