尝试使用 STOMP.py 连接时出现协议错误

Protocol error on trying to connect using STOMP.py

在我目前的情况下,我正在使用 stomp.py 库 (http://jasonrbriggs.github.io/stomp.py/stomp.html#module-stomp.connect) 连接到另一台服务器上的 ActiveMQ 实例。我在 python 2.7 上,当没有配置 SSL 时,连接工作正常。我使用提供的连接方法(1.2)进行连接,除了主机和端口外,还提供以下参数:

  1. ssl_key_file=ssl_key_file
  2. ssl_cert_file=ssl_cert_file
  3. ssl_version=ssl.PROTOCOL_TLSv1_2
  4. use_ssl=真

密钥和证书文件是我使用 file open() 方法获得的上述文件中的文本,该方法似乎工作正常。

我已经尝试过在其他选项中也设置 ssl.SSL_Context 中的上下文。我很确定 ActiveMQ 使用 SSL 并且已经说过协议。

当我尝试使用 conn.start() 进行连接时,我收到以下错误:

File "/usr/local/lib/python2.7/dist-packages/stomp/transport.py", line 733, in attempt_connection
tls_context.load_cert_chain(certfile, keyfile, password)
IOError: [Errno 71] Protocol error

我找不到让 stomp.py 使用 SSL 连接的工作示例,因此我找不到执行此操作的方法。

有没有人以前看过这个?

经过相当广泛的搜索,我自己找到了答案。原来你需要set_ssl之前

conn.set_ssl(for_hosts=[(activemq_url,activemq_port)],key_file=KEYFILE,cert_file=CERTFILE)

您需要提供 KEYFILE 和 CERTFILE 的路径,set_ssl 可以使用文件 open() 方法检查并传入内容。

注意:您需要在创建连接之后设置此项,但是 调用 conn.start() 方法之前!