【Consul】Consul实践指导-Encryption配置

x33g5p2x  于2021-12-20 转载在 其他  
字(1.7k)|赞(0)|评价(0)|浏览(262)

     Consul Agent支持对其所有的网络数据流进行加密。加密方法后续介绍。有两个独立的加密系统:Gossip Traffic和RPC。

1.1.1 Gossip Encryption

     启用Gossip加密方式,只需要在启动Agent时设置加密密钥。通过encrypt参数设置密钥:设置的值是包含密钥的配置文件。

     Key值必须是16字节,基于base64编码。为方便起见,Consul提供consul keygen命令来生成满足要求的加密密钥:

$ consul keygen
cg8StVXbQJ0gPvMd9o7yrg==

     使用这个key,可以启用加密;如果启用了加密,consul agent的输出会显示“Encrypted: true”

$ cat encrypt.json
{"encrypt":"cg8StVXbQJ0gPvMd9o7yrg=="}
 
$ consul agent -data-dir=/tmp/consul -config-fileencrypt.json
==> WARNING: LAN keyring exists but -encryptgiven, using keyring
==> WARNING: WAN keyring exists but -encryptgiven, using keyring
==> Starting Consul agent...
==> Starting Consul agent RPC...
==> Consul agent running!
         Nodename: 'Armons-MacBook-Air.local'
       Datacenter: 'dc1'
           Server: false (bootstrap: false)
       ClientAddr: 127.0.0.1 (HTTP: 8500, HTTPS: -1, DNS: 8600, RPC: 8400)
      ClusterAddr: 10.1.10.12 (LAN: 8301, WAN: 8302)
    Gossip encrypt:true, RPC-TLS: false, TLS-Incoming: false
            Atlas: <disabled>
...

     Consul集群中所有的节点必须使用相同的加密key——便于接收发送集群信息。

1.1.2 RPC ENCRYPTION WITH TLS

     Consul支持使用TLS校验server和client的授权。如何启用TLS哪?Consul要求所有的客户端和服务器都有由独立的证书颁发机构生成的密钥对。是一个私有CA,只在内部使用。CA为每个代理签发密钥。注:客户端证书必须启用Extended key来验证客户端和服务器身份。

     TLS能够用于验证Server授权和Client授权,可通过verify_outgoing, verify_server_hostname, verify_incoming参数设置。

     若设置verify_outgoing,agent将校验传出连接的consul授权。Server节点必须由目前的所有Agent的密钥证书,通过agent的ca_file选项设置。所有的Server节点必须使用cert_file和key_file设置一个合适的密钥对。

     若设置verify_server_hostname, 传出连接执行主机名验证,所有的Server都采用如下格式“server.<datacenter>.<domain>”,否则Client拒绝握手(handshake)。这是自版本0.5.1引入的新配置,它是用来防止Client在server模式下恶意重启和执行MITM攻击。在部署consul集群时应该设置为true,并采用适当的证书,但这是默认为false,以避免破坏已经部署的集群。

     如果verify_incoming设置,Server将验证所有传入连接的授权。所有Client必须使用cert_file和key_file设置有效的密钥对。Server也将禁止任何非TLS连接。强迫Client使用TLS,也必须设置verify_outgoing。

     TLS是用来确保Agent之间调用RPC的安全性,但节点之间的Gossip使用UDP和对称密钥确保安全。

相关文章