ZeroMQ API(七) 安全

2021-04-14 08:26

阅读:550

标签:amp   方向   github   文本   hub   serve   需要   数据   专用   

1、无安全性:zmq_null(7)

1.1 名称

  zmq_null - 没有安全性或机密性

1.2 概要

  NULL机制由ZMTP 3.0规范定义:http://rfc.zeromq.org/spec:23。 这是ZeroMQ套接字的默认安全机制。

2、使用用户名和密码进行纯文本身份验证:zmq_plain(7)

2.1 名称

  zmq_plain - 明文认证

2.2 概要

  PLAIN机制定义了一个简单的用户名/密码机制,让服务器对客户端进行身份验证。 PLAIN不做任何安全或保密的尝试。 它旨在用于安全要求较低的内部网络。 PLAIN机制由此文档定义:http://rfc.zeromq.org/spec:24。

2.3 用法

  要使用PLAIN,服务器应设置ZMQ_PLAIN_SERVER选项,客户端应设置ZMQ_PLAIN_USERNAME和ZMQ_PLAIN_PASSWORD套接字选项。 哪个对等体绑定,哪个连接,并不相关。

3、椭圆曲线认证和加密:zmq_curve(7)

3.1 名称

  zmq_curve - 安全认证和机密性

3.2 概要

  CURVE机制为客户端和服务器之间的通信定义了安全身份验证和机密性机制。 CURVE适用于公共网络。 CURVE机制由此文档定义:http://rfc.zeromq.org/spec:25。

3.3 客户端和服务器角色

  使用CURVE的套接字在任何时候都可以是客户端或服务器,但不能同时使用两者。角色独立于绑定/连接方向。

  通过设置新选项,套接字可以随时更改角色。该角色会影响后面的所有zmq_connect和zmq_bind调用。

  要成为CURVE服务器,应用程序将在套接字上设置ZMQ_CURVE_SERVER选项,然后设置ZMQ_CURVE_SECRETKEY选项以向套接字提供其长期密钥。应用程序不提供带有长期公钥的套接字,该公钥只用于客户端。

  要成为CURVE客户端,应用程序使用它想要连接的服务器的长期公钥来设置ZMQ_CURVE_SERVERKEY选项,或者接受来自next的连接。应用程序然后使用其客户端长期密钥对设置ZMQ_CURVE_PUBLICKEY和ZMQ_CURVE_SECRETKEY选项。

  如果服务器进行身份验证,它将基于客户端的长期公钥。

3.4 密钥编码

  源代码中密钥的标准表示形式是32个字节的基本256(二进制)数据,或40个字符的基本85数据,使用http://rfc.zeromq.org/spec:32定义的Z85算法进行编码。

  Z85算法旨在生成可打印的密钥字符串,以用于配置文件,命令行和代码。 C中有一个参考实现,位于https://github.com/zeromq/rfc/tree/master/src。

3.5 测试关键值

对于测试用例,客户端应使用此长期密钥对(在Z85中指定为十六进制):
public:
BB88471D65E2659B30C55A5321CEBB5AAB2B70A398645C26DCA2B2FCB43FC518
Yne@$w-vo[IaLV{hID

secret:
7BB864B489AFA3671FBE69101F94B38972F24816DFB01B51656B3FEC8DFD0888
D:)Q[IlAW!ahhC2ac:9*A}h:p?([4%wOTJ%JR%cs

服务器应使用此长期密钥对(在Z85中指定为十六进制):
public:
54FCBA24E93249969316FB617C872BB0C1D1FF14800427C594CBFACF1BC2D652
rq:rM>}U?@Lns47E1%kR.o@n%FcmmsL/@{H8]yf7

secret:
8E0BDD697628B91D8F245587EE95C5B04D48963F79259877B49CD9063AEAD3B7
JTKVSB%%)wK0E.X)V>+}o?pNmC{O&4W4b!Ni{Lh6

4、以加密文本格式生成CURVE密钥对:zmq_curve_keypair(3)

4.1 名称

  zmq_curve_keypair - 生成一个新的CURVE密钥对

4.2 概要

  int zmq_curve_keypair(char * z85_public_key,char * z85_secret_key);

4.3 描述

  zmq_curve_keypair()函数将返回由公钥和秘密密钥组成的新生成的随机密钥对。 调用者提供了两个缓冲区,每个缓冲区至少有41个八位字节,其中该方法将存储这些密钥。 密钥使用zmq_z85_encode(3)进行编码。

4.4 返回值

  如果成功,zmq_curve_keypair()函数将返回0,否则返回-1并将errno设置为下面定义的值之一。

4.5 错误

  ENOTSUP:libzmq库不是用加密支持(libsodium)构建的。

5、将加密钥匙转换为32字节的二进制密钥:zmq_z85_decode(3)

5.1 名称

  zmq_z85_decode - 解码Z85可打印文本中的二进制密钥

5.2 概要

  uint8_t * zmq_z85_decode(uint8_t * dest,const char * string);

5.3 描述

  zmq_z85_decode()函数应将字符串解码为dest。 字符串的长度应能被5整除。dest必须足够大,以便解码值(0.8 x strlen(字符串))。编码应遵循ZMQ RFC 32规范。

5.4 返回值

  如果成功,zmq_z85_decode()函数将返回dest,否则返回NULL。

6、将32字节二进制CURVE键转换为加密文本字符串:zmq_z85_encode(3)

6.1 名称

  zmq_z85_encode - 将二进制密钥编码为Z85可打印文本

6.2 概要

  char * zmq_z85_encode(char * dest,const uint8_t * data,size_t size);

6.3 描述

  zmq_z85_encode()函数应将由数据和大小指定的二进制块编码为dest中的字符串。 二进制块的大小必须可以被4整除。对于空终止符,dest必须有足够的空间用于大小* 1.25加1。 一个32字节的CURVE键被编码为40个ASCII字符加上一个空终止符。编码应遵循ZMQ RFC 32规范。

6.4 返回值

  如果成功,zmq_z85_encode()函数将返回dest,否则返回NULL。

7、安全的身份验证和机密性:zmq_gssapi

7.1 名称

  zmq_gssapi - 安全认证和机密性

7.2 概要

  GSSAPI机制为使用通用安全服务应用程序接口(GSSAPI)在客户端和服务器之间进行通信的安全身份验证和机密性定义了一种机制。 GSSAPI机制可用于公共和私人网络。 GSSAPI本身在IETF RFC-2743中定义:http://tools.ietf.org/html/rfc2743。 ZeroMQ GSSAPI机制由以下文档定义:http://rfc.zeromq.org/spec:38。

7.3 客户端和服务器角色

  使用GSSAPI的套接字可以是客户端或服务器,但不能同时使用两者。

  要成为GSSAPI客户端或服务器,应用程序会设置ZMQ_GSSAPI_PRINCIPAL选项以向套接字提供应为其获取GSSAPI证书的主体的名称。

  要成为GSSAPI服务器,应用程序会在套接字上添加ZMQ_GSSAPI_SERVER选项。

  要成为GSSAPI客户端,应用程序集还会将ZMQ_GSSAPI_SERVICE_PRINCIPAL选项设置为其打算连接的服务器的主体的名称。

7.4 可选加密

  默认情况下,GSSAPI机制将加密客户端和服务器之间的所有通信。如果不需要加密(例如,在专用网络上),客户端和服务器应用程序可以通过设置ZMQ_GSSAPI_PLAINTEXT选项来禁用它。客户端和服务器都必须将此选项设置为相同的值。

ZeroMQ API(七) 安全

标签:amp   方向   github   文本   hub   serve   需要   数据   专用   

原文地址:https://www.cnblogs.com/ChinaHook/p/8964888.html


评论


亲,登录后才可以留言!