1. 前言: ZeroMq aka zmq是最知名的网络消息中间件之一。使有zmq的开源软件中最知名的莫过于Apache基金会下的Storm。我厂内部使用zmq的有即通的yaaf框架。 ZMQ社区在2013年9月发布了zmq4。zmq4最大的新功能即提供了一套安全机制,其中有IP黑白名单,用户名/密码鉴权,ECC(Elliptic Curve Cryptography)证书鉴权,以及通讯的加密(类似TSL)。 本文主要介绍zmq4.0的安全机制。 2. ECC的故事: 这里的ECC不是我厂历史上的电商事业群,而是椭圆曲线加密算法。ECC据说被NSA(美国安全局)操作,在算法中设置了后门。不过好在不是只有一种椭圆曲线,而是有无数种,不同的曲线有不同的优点和缺点,只是其中由NIST(美国标准和技术研究署)推荐的曲线被怀疑设置了后门。 ZMQ使用的椭圆曲线算法是Curve25519 ,它有开源实现而且没有专利保护。zmq用了长度为256bits的密钥,强度相当于RSA 3072比特的密钥长度。 ECDH(Elliptic Curve Diffie-Hellman)则是一个密钥协商协议。非常简单地讲,当A与B在一个不受信任的网络中通讯前,A和B先生成一对公私钥,并且A和B通过某个完全的渠道事先知道对方的公钥,然后A和B在握手阶段协商出一个双方公知的私钥供加密接下来的通讯。 可以理解成zmq设计了一个专门为自己定制的精简的TLS,更多的理论细节在http://curvezmq.org/page:read-the-docs, 作为一个码农,下面用代码介绍使用zmq4的Curve安全机制 3. 证书鉴权,通讯加密,IP 白名单 编译zmq4.x以后,会生成一个名叫curve_keygen的程序,用它可以生成zmq 的证书。证书是一个一般的文本文件,如下是一个curve_keygen生成的zmq证书的例子。 # **** Generated on 2017-01-02 14:24:20 by CZMQ **** # ZeroMQ CURVE **Secret** Certificate # DO NOT PROVIDE THIS FILE TO OTHER USERS nor change its permissions. metadata email = “kamuszhou@tencent.com” curve public-key = “!Upjrn]2Dk)jQkYREsceBnpgoIL7koE{CVnV1j4D” secret-key = “ZPT#=l/#Rtg:TeLbofh:uPi7#/w(GDZq[0^qPZA1”   ...

January 17, 2017 · 1 min · kamus