gpt4 book ai didi

security - ZMQ加密: how to know when the handshake failed?

转载 作者:行者123 更新时间:2023-12-02 22:03:08 24 4
gpt4 key购买 nike

上下文

  • 我正在尝试使用 ZMQ 4.2.1 正确实现加密(this commit actually)
  • 我阅读了 Pieter Hintjens ( here ) 撰写的非常有趣的文章,其中描述了客户端和服务器之间的握手过程。
  • 我有:
    • 客户端,知道服务器的公钥+自己的 key 对
    • 服务器,只知道自己的 key 对

用例

我想知道我的客户何时使用了错误的 key (他知道的三个 key 中的一个或多个是错误的)。

在玩这个用例时,今天连接失败如预期,但我无法知道连接失败是否是因为加密握手失败。

注意:当我设置好 key 时,连接也工作得很好

设置

服务器:

  • 套接字:ZMQ_ROUTER绑定(bind)到 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正在监听经销商套接字的事件。

行为

我在两个简单的控制台应用程序中运行服务器和客户端,客户端使用了错误的服务器公钥。

以下是服务器监控套接字的日志跟踪:

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...

我尝试很快地从跟踪中跟踪 ZMQ 的代码“无法打开客户端 HELLO - 错误的服务器 key ”(请参阅 this file ),但看起来并不存在握手的特定处理失败,或者也许我在代码中没有走得足够远来找出它......

是否有人已经遇到过这种情况,并且知道如何知道我们使用的 key 是否良好?对我来说,这些信息似乎很重要,但也许出于安全原因,ZMQ 没有提供这些信息?我真的不是安全专家......

最佳答案

编辑2018-02-05:

该功能自 version 4.2.1 以来一直稳定且可用,仍在 API 的 DRAFT 部分。

参见the documentation :

ZMQ_EVENT_HANDSHAKE_FAILED

The ZMTP security mechanism handshake failed. The event value is unspecified. NOTE: in DRAFT state, not yet available in stable releases.

ZMQ_EVENT_HANDSHAKE_SUCCEED

The ZMTP security mechanism handshake succeeded. The event value is unspecified. NOTE: in DRAFT state, not yet available in stable releases.

<小时/>

编辑2017-01-01:

拉取请求已合并到 libzmq 的主分支中。现在可以使用监视事件获取握手状态:

  • 一旦加密握手成功,就会引发ZMQ_EVENT_HANDSHAKE_SUCCEED
  • ZMQ_EVENT_HANDSHAKE_FAILED 在失败时引发

但是此功能仍然不稳定,您需要使用预处理器指令 ZMQ_BUILD_DRAFT_API 编译 libzmq

<小时/>

原答案(2016-12-29):

目前没有适合此目的的功能。

libzmq github 有一个开放的功能请求.

关于security - ZMQ加密: how to know when the handshake failed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41380623/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com