【发布时间】:2016-12-29 13:21:04
【问题描述】:
上下文
- 我正在尝试使用ZMQ 4.2.1 (this commit actually) 正确实施加密
- 我阅读了 Pieter Hintjens (here) 的一篇非常有趣的文章,他在其中描述了客户端和服务器之间的握手过程。
- 我有:
- 客户端,知道服务器的公钥 + 自己的密钥对
- 只知道自己的密钥对的服务器
用例
我想知道我的客户何时使用了错误的密钥(他知道的三个密钥中的一个或多个是错误的)。
玩这个用例时,今天连接失败不出所料,但我无法知道连接是否因为加密握手失败而失败。
注意:当我设置好的键时,连接也正常
设置
服务器:
- 套接字:ZMQ_ROUTER,绑定在 TCP 端点上。
-
Parameters:
- ZMQ_CURVE_SERVER = 1
- ZMQ_CURVE_SECRETKEY = 服务器的私钥
- ZMQ_CURVE_PUBLICKEY = 服务器的公钥
- monitoring socket 正在监听路由器套接字的事件。
客户:
- 套接字:ZMQ_DEALER,连接到服务器的 TCP 端点。
-
Parameters:
- ZMQ_CURVE_SERVER = 0
- ZMQ_CURVE_SERVERKEY = 服务器的公钥
- ZMQ_CURVE_SECRETKEY = 客户端的私钥
- ZMQ_CURVE_PUBLICKEY = 客户端的公钥
- monitoring socket 正在侦听庄家套接字的事件。
行为
我在两个简单的控制台应用程序中运行我的服务器和客户端,客户端使用了错误的服务器公钥。
这里是服务器监控socket的日志跟踪:
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...
这里是客户端监控socket的日志跟踪:
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...
我很快尝试从跟踪中跟踪 ZMQ 的代码 “无法打开客户端 HELLO -- 错误的服务器密钥”(请参阅 this file),但看起来没有握手的特定处理失败,或者我在代码中没有走得足够远......
是否有人已经遇到过这种情况并知道如何知道我们使用的密钥是否正确? 对我来说,这些信息似乎很重要,但出于安全原因,ZMQ 可能没有提供?我真的不是安全专家...
【问题讨论】:
标签: security networking encryption zeromq