我想知道我的客户端何时使用了错误的密钥(他知道的三个中的一个或多个是错的)。
在播放此用例时,今天连接失败按预期但由于加密握手失败,我无法知道连接是否失败。
Nb。:当我设置好键时,连接也可以正常工作
服务器:
客户:
我在两个简单的控制台应用程序中运行我的服务器和客户端,客户端使用错误的服务器的publioc密钥。
以下是服务器监控套接字的日志跟踪:
Router monitoring event: MONITOR_STARTED -
Router monitoring event: LISTENING - tcp://0.0.0.0:20100
Router monitoring event: ACCEPTED - tcp://0.0.0.0:20100
Router monitoring event: DISCONNECTED - tcp://0.0.0.0:20100
Router monitoring event: ACCEPTED - tcp://0.0.0.0:20100
Router monitoring event: DISCONNECTED - tcp://0.0.0.0:20100
Router monitoring event: ACCEPTED - tcp://0.0.0.0:20100
Router monitoring event: DISCONNECTED - tcp://0.0.0.0:20100
Router monitoring event: ACCEPTED - tcp://0.0.0.0:20100
Router monitoring event: DISCONNECTED - tcp://0.0.0.0:20100
Router monitoring event: ACCEPTED - tcp://0.0.0.0:20100
And so on...
以下是执行此用例时刚刚发生的控制台跟踪:
CURVE I: cannot open client HELLO -- wrong server key?
CURVE I: cannot open client HELLO -- wrong server key?
CURVE I: cannot open client HELLO -- wrong server key?
CURVE I: cannot open client HELLO -- wrong server key?
CURVE I: cannot open client HELLO -- wrong server key?
And so on...
以下是客户端监控套接字的日志跟踪:
Dealer monitoring event: MONITOR_STARTED -
Dealer monitoring event: CONNECT_DELAYED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: DISCONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_RETRIED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_DELAYED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: DISCONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_RETRIED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_DELAYED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: DISCONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_RETRIED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECT_DELAYED - tcp://127.0.0.1:20100
Dealer monitoring event: CONNECTED - tcp://127.0.0.1:20100
Dealer monitoring event: DISCONNECTED - tcp://127.0.0.1:20100
And so on...
我很快就尝试从跟踪&#34中跟踪ZMQ的代码;无法打开客户端HELLO - 错误的服务器密钥" (请参阅this file),但它看起来没有针对握手的特定处理失败,或者我在代码中没有走得太远以找到它...
是否有人已经遇到过这种情况并知道如何知道我们使用的钥匙是否合适? 对我来说,这些信息似乎很重要,但是出于安全原因,ZMQ可能没有提供这些信息吗?我真的不是安全方面的专家......
答案 0 :(得分:2)
编辑2018-02-05:
该功能自version 4.2.1起稳定可用,仍然位于API的 DRAFT 部分。
<强> ZMQ_EVENT_HANDSHAKE_FAILED 强>
ZMTP安全机制握手失败。事件值未指定。注意:在DRAFT状态下,尚未在稳定版本中提供。
<强> ZMQ_EVENT_HANDSHAKE_SUCCEED 强>
ZMTP安全机制握手成功。事件值未指定。注意:在DRAFT状态下,尚未在稳定版本中提供。
编辑2017-01-01:
拉取请求已合并到libzmq
的主分支中。
现在可以使用监视事件获取握手状态:
ZMQ_EVENT_HANDSHAKE_SUCCEED
ZMQ_EVENT_HANDSHAKE_FAILED
在失败时被提出但是此功能仍然不稳定,您需要使用预处理器指令libzmq
编译ZMQ_BUILD_DRAFT_API
。
原始答案(2016-12-29):
目前没有适当的功能。
libzmq
github上有一项未公开的功能请求。