0
我試圖使用pika使用SSL(自簽名)連接到RabbitMQ。使用SSL連接的Pika無證書文件
問題是,如果我不給證書文件給pika,連接不會失敗。
這是我的代碼:
import pika
import urllib
connection = pika.BlockingConnection(pika.URLParameters("amqps://guest:[email protected]:25585"))
channel = connection.channel()
channel.queue_declare(queue='hello')
channel.basic_publish(exchange='',
routing_key='hello',
body='Hello World!')
print(" [x] Sent 'Hello World!'")
connection.close()
這是我rabbitmq.config:
{tcp_listeners, []},
{ssl_listeners, [25585]},
{ssl_options, [{cacertfile, "/etc/rabbitmq/certs/cacert.pem"},
{certfile, "/etc/rabbitmq/certs/cert.pem"},
{keyfile, "/etc/rabbitmq/certs/key.pem"},
{verify, verify_peer},
{versions, ['tlsv1.2', 'tlsv1.1', 'tlsv1']},
{fail_if_no_peer_cert, false}]},
我已禁用TCP連接並啓用了SSL,爲什麼連接不失敗?
我不希望客戶端身份驗證,我認爲如果證書無效,客戶端庫(pika)將丟棄連接 –
在這種情況下,請在客戶端使用以下參數創建連接:'pika.BlockingConnection( pika.ConnectionParameters( host ='172.16.120.130',port = 25585,credentials = pika.PlainCredentials(user,password),ssl = True,ssl_options = {「cert_reqs」:ssl.CERT_REQUIRED,「ca_certs」:caCert}) )' 其中'caCert'是包含服務器證書的證書文件。 –
如果您不這樣做,您的客戶端將忽略服務器證書驗證。您需要告訴客戶端在連接設置中使用'ssl_options'驗證服務器證書 –