2016-10-22 9 views
0

pikaを使用してSSLを使用してRabbitMQに接続しようとしています(自己署名済み)。Pikaが証明書ファイルなしでSSLを使用して接続する

問題は、証明書ファイルを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}]}, 

Iが無効にTCPコネクションを持っていると、接続に失敗されていない理由SSLを有効に?

答えて

0

それはので、サーバーでこの構成のためです:へ{fail_if_no_peer_cert, false}

変更を:{fail_if_no_peer_cert, true}

それはクライアントが提示証明書が存在しない場合は、接続をドロップを意味します。

+0

証明書が有効でない場合、クライアントライブラリ(pika)が接続を切断することはありません –

+0

その場合、クライアント側で次のパラメータを使用して接続を作成してください: 'pika.BlockingConnection pika.ConnectionParameters( host = '172.16.120.130'、ポート= 25585、credentials = pika.PlainCredentials(ユーザー、パスワード)、ssl = True、ssl_options = {"cert_reqs":ssl.CERT_REQUIRED、 "ca_certs":caCert}) ) ' ここで、' caCert'はサーバ証明書を含む証明書ファイルです。 –

+0

これを行わないと、クライアントはサーバー証明書の検証を無視します。接続設定の 'ssl_options'でサーバ証明書を検証するようにクライアントに指示する必要があります –

関連する問題