2016-04-17 6 views
1

Ich habe einen RabbitMQ 3.6.1 Server auf Ubuntu 14.04 läuft richtig. Ich habe versucht, einen SSL-Listener nach official documentation zu konfigurieren. Keine Probleme beim Start.Wie Debuggen "pika.exceptions.AuthenticationError: EXTERNAL" Fehler beim Herstellen einer TLS-Verbindung zu RabbitMQ?

jedoch, wenn eine Verbindung herzustellen versucht, erhalte ich die folgende Fehlermeldung auf Python/pika Seite (vollständige Transkript unten):

pika.exceptions.AuthenticationError: EXTERNAL 

Was hier bedeutet EXTERNAL? Wie man debuggt/weitere Details des Fehlers erhält?


Kurs von Aktionen (zu testen ich eine Vagrant-Box und eine lokale Verbindung verwendet wird):

  1. RabbitMQ beginnt SSL-Listener auf Port 5671 (pro /var/log/rabbitmq/[email protected]):

    started SSL Listener on [::]:5671 
    
  2. Ich führe die pika.BlockingConnection auf der Client-Seite.

  3. Auf der Serverseite I eine eingehende Verbindung sehen:

    =INFO REPORT==== 17-Apr-2016::17:07:15 === 
    accepting AMQP connection <0.2788.0> (127.0.0.1:48404 -> 127.0.0.1:5671) 
    
  4. Client schlägt mit:

    pika.exceptions.AuthenticationError: EXTERNAL 
    
  5. Server Timeouts:

    =ERROR REPORT==== 17-Apr-2016::17:07:25 === 
    closing AMQP connection <0.2788.0> (127.0.0.1:48404 -> 127.0.0.1:5671): 
    {handshake_timeout,frame_header} 
    

vollständige Abschrift der Client-Seite:

>>> import pika, ssl 
>>> from pika.credentials import ExternalCredentials 
>>> ssl_options = ({"ca_certs": "/etc/rabbitmq/certs/testca/cacert.pem", 
...     "certfile": "/etc/rabbitmq/certs/client/cert.pem", 
...     "keyfile": "/etc/rabbitmq/certs/client/key.pem", 
...     "cert_reqs": ssl.CERT_REQUIRED, 
...     "server_side": False}) 
>>> host = "localhost" 
>>> connection = pika.BlockingConnection(
...     pika.ConnectionParameters(
...      host, 5671, credentials=ExternalCredentials(), 
...      ssl=True, ssl_options=ssl_options)) 
Traceback (most recent call last): 
    File "<stdin>", line 4, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 339, in __init__ 
    self._process_io_for_connection_setup() 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 374, in _process_io_for_connection_setup 
    self._open_error_result.is_ready) 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/blocking_connection.py", line 410, in _flush_output 
    self._impl.ioloop.poll() 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 602, in poll 
    self._process_fd_events(fd_event_map, write_only) 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/select_connection.py", line 443, in _process_fd_events 
    handler(fileno, events, write_only=write_only) 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 364, in _handle_events 
    self._handle_read() 
    File "/usr/local/lib/python2.7/dist-packages/pika/adapters/base_connection.py", line 415, in _handle_read 
    self._on_data_available(data) 
    File "/usr/local/lib/python2.7/dist-packages/pika/connection.py", line 1347, in _on_data_available 
    self._process_frame(frame_value) 
    File "/usr/local/lib/python2.7/dist-packages/pika/connection.py", line 1414, in _process_frame 
    if self._process_callbacks(frame_value): 
    File "/usr/local/lib/python2.7/dist-packages/pika/connection.py", line 1384, in _process_callbacks 
    frame_value) # Args 
    File "/usr/local/lib/python2.7/dist-packages/pika/callback.py", line 60, in wrapper 
    return function(*tuple(args), **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pika/callback.py", line 92, in wrapper 
    return function(*args, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/pika/callback.py", line 236, in process 
    callback(*args, **keywords) 
    File "/usr/local/lib/python2.7/dist-packages/pika/connection.py", line 1298, in _on_connection_start 
    self._send_connection_start_ok(*self._get_credentials(method_frame)) 
    File "/usr/local/lib/python2.7/dist-packages/pika/connection.py", line 1077, in _get_credentials 
    raise exceptions.AuthenticationError(self.params.credentials.TYPE) 
pika.exceptions.AuthenticationError: EXTERNAL 
>>> 

Antwort

1

Der Python/pika-Code in der Frage ist richtig.

Der Fehler:

pika.exceptions.AuthenticationError: EXTERNAL

berichtet wird, wenn Client-Zertifikat Genehmigung nicht auf der RabbitMQ Server-Seite aktiviert ist. Das Wort EXTERNAL im Fehler bezieht sich auf den Authentifizierungsmechanismus als described here.

aktivieren:

rabbitmq-plugins enable rabbitmq_auth_mechanism_ssl 
+2

Sie müssen auch sicherstellen, dass die rabbit.config externe Authentifizierungs erlaubt. Meines sah so aus, als ich hierher kam, um nach Hinweisen zu suchen: '{auth_mechanisms, ['PLAIN', 'AMQPLAIN']}},' Hinweis: EXTERN nicht erwähnt! – Chris

+0

@Chris Danke für wertvolle Eingaben. – techraf

Verwandte Themen