TLS

概述

用户可以通过配置SSL/TLS启动HTTPS通信,保障数据的安全传输。包括客户端与服务端TLS,通过配置来自动启用Consumer与Provider的TLS配置。

配置

tls可配置于chassis.yaml文件或单独的tls.yaml文件。在如下格式中,tag指明服务名以及服务类型,key指定对应configuration的配置项。

ssl:
  [tag].[key]: [configuration]

TAG

tag为空时ssl配置为公共配置。registry.consumer及configcenter.consumer是作为消费者访问服务中心和配置中心时的ssl配置。protocol.serviceType允许协议和类型的任意组合。name.protocol.serviceType在协议和类型的基础上可定制服务名。

registry.Consumer

服务注册中心TLS配置

serviceDiscovery.Consumer

服务发现TLS配置

contractDiscovery.Consumer

契约发现TLS配置

registrator.Consumer

服务注册中心TLS配置

configcenter.Consumer

配置中心TLS配置 |

{protocol}.{serviceType}

协议为任意协议目前包括 highwayrest,用户扩展协议后,即可使用新的协议配置。 类型为Consumer,Provider |

{name}.{protocol}.{serviceType}

定制某微服务的独有的TLS配置 name为微服务名

KEY

ssl支持以下配置项,其中若私钥KEY文件加密,则需要指定加解密插件及密码套件等信息进行解密。

cipherPlugin

(optional, string) 指定加解密插件 内部插件支持 default aes, 默认default |

verifyPeer

(optional, bool) | 是否验证对端,默认false

cipherSuits

(optional, string) TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 密码套件 |

protocol

(optional, string) TLS协议的最小版本,默认为TLSv1.2

caFile

(optional, string) ca文件路径

certFile

(optional, string) 私钥cert文件路径

keyFile

(optional, string) 私钥key文件路径

certPwdFile

(optional, string) 私钥key加密的密码文件

API

通过为Provider和Consumer配置ssl,go-chassis会自动为其加载相关配置。用户也可以通过chassis暴露的接口直接使用相关API。以下API主要用于获取ssl配置以及tls.Config。

获取默认SSL配置

GetDefaultSSLConfig() *common.SSLConfig

获取指定SSL配置

GetSSLConfigByService(svcName, protocol, svcType string) (*common.SSLConfig, error)

获取指定TLSConfig

GetTLSConfigByService(svcName, protocol, svcType string) (*tls.Config, *common.SSLConfig, error)

示例

Provider配置

以下为rest类型provider提供HTTPS访问的ssl配置,其中tag为protocol.serviceType的形式。

ssl:
  rest.Provider.cipherPlugin: default
  rest.Provider.verifyPeer: true
  rest.Provider.cipherSuits: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  rest.Provider.protocol: TLSv1.2
  rest.Provider.keyFile: /etc/ssl/server_key.pem
  rest.Provider.certFile: /etc/ssl/server.cer
  rest.Provider.certPwdFile: /etc/ssl/cert_pwd_plain
  rest.Provider.caFile: /etc/ssl/trust.cer

Consumer配置

以下为访问rest类型服务的消费者的ssl配置。tag为name.protocol.serviceType的形式,其中Server为要访问的服务名,rest为协议。verifyPeer若配置为true将启动双向认证,否则客户端将忽略对服务端的校验。

ssl:
  Server.rest.Consumer.cipherPlugin: default
  Server.rest.Consumer.verifyPeer: true
  Server.rest.Consumer.cipherSuits: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256, TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384
  Server.rest.Consumer.protocol: TLSv1.2
  Server.rest.Consumer.keyFile: /etc/ssl/server_key.pem
  Server.rest.Consumer.certFile: /etc/ssl/server.cer
  Server.rest.Consumer.certPwdFile: /etc/ssl/cert_pwd_plain
  Server.rest.Consumer.caFile: /etc/ssl/trust.cer