title: “使用TLS通信” lang: cn ref: use-tls permalink: /cn/docs/users/use-tls/ excerpt: “使用TLS通信” last_modified_at: 2017-08-15T15:01:43-04:00 redirect_from:

  • /theme-setup/

场景描述

用户通过简单的配置即可启用TLS通信,以保障数据的传输安全。

外部服务通信配置

与外部服务通信相关的配置写在microservice.yaml文件中。

  • 服务中心TLS通信配置 微服务与服务中心的连接可以通过将http改为https启用TLS通信,配置示例如下:

    servicecomb:
      service:
        registry:
          address: https://127.0.0.1:30100
    
  • 服务提供者启用TLS通信 服务提供者在配置服务监听地址时,可以通过在地址后面追加?sslEnabled=true开启TLS通信,示例如下:

    servicecomb:
      rest:
        address: 0.0.0.0:8080?sslEnabled=true
      highway:
        address: 0.0.0.0:7070?sslEnabled=true
    

证书配置

证书配置项写在microservice.yaml文件中,支持统一制定证书,也可以添加tag进行更细粒度的配置,有tag的配置会覆盖全局配置,配置格式如下:

ssl.[tag].[property]

证书配置项见下表证书配置项说明表。

表1 证书配置项说明表

配置项默认值取值范围是否必选含义注意
ssl.protocolsTLSv1.2-协议列表使用逗号分隔
ssl.ciphersTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_GCM_SHA256
-算法列表使用逗号分隔
ssl.authPeertrue-是否认证对端-
ssl.checkCN.hosttrue-是否对证书的CN进行检查该配置项只对Consumer端,并且使用http协议有效,即Consumer端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:https://tools.ietf.org/html/rfc2818。
ssl.trustStoretrust.jks-信任证书文件-
ssl.trustStoreTypeJKS-信任证书类型-
ssl.trustStoreValue--信任证书密码-
ssl.keyStoreserver.p12-身份证书文件-
ssl.keyStoreTypePKCS12-身份证书类型-
ssl.keyStoreValue--身份证书密码-
ssl.crlrevoke.crl-吊销证书文件-
ssl.sslCustomClass-org.apache.servicecomb.foundation.ssl.SSLCustom的实现类SSLCustom类的实现,用于开发者转换密码、文件路径等。-

说明

  • 默认的协议算法是高强度加密算法,JDK需要安装对应的策略文件,参考:http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html。 您可以在配置文件配置使用非高强度算法。
  • 微服务消费者,可以针对不同的提供者指定证书(当前证书是按照HOST签发的,不同的提供者都使用一份证书存储介质,这份介质同时给微服务访问服务中心和配置中心使用)。

服务中心的证书配置

目前支持使用环境变量来配置服务中心的TLS认证方式,默认开启TLS通信,双向认证模式,认证对端时同时校验对端是否匹配证书(CommonName)字段。服务管理中心的证书配置项说明见下表服务中心TLS证书配置项说明。

表2 服务中心TLS证书配置项说明

配置项默认值取值范围是否必选含义注意
CSE_SSL_MODE11/0
0:HTTPS
1:HTTP
设置协议模式-
CSE_SSL_VERIFY_CLIENT11/0
0:HTTPS
1:HTTP
设置HTTPS模式下是否认证对端-
CSE_SSL_PASSPHASE--设置HTTPS模式下的证书密钥访问密码-

服务管理中心配置文件为$APP_ROOT/conf/app.conf,配置项见,该配置暂不支持环境变量方式设置。

表3 服务中心配置文件

配置项默认值取值范围是否必选含义注意
ssl_protocolsTLSv1.2-通信使用的SSL版本-
ssl_ciphersTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_GCM_SHA256,
TLS_RSA_WITH_AES_128_CBC_SHA
-配置使用算法列表由于服务中心支持HTTP/2协议,所以ssl_ciphers必须配置有TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256算法。TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA被列为HTTP/2协议的不安全算法黑名单,但为了客户端算法兼容性,存在时必须配置到最后一位。

密钥物料及证书存放路径

表4 密钥物料及证书存放路径

配置项含义对应环境变量注意
/---
/opt---
/opt/CSE-INSTALL_ROOT-
/opt/CSE/etc---
/opt/CSE/etc/cipher密钥物料存放目录CIPHER_ROOT-
/opt/CSE/etc/ssl证书存放目录SSL_ROOT-
/opt/CSE/etc/ssl/trust.cer授信CA--
/opt/CSE/etc/ssl/server_key.pem已加密服务端私钥文件--
/opt/CSE/etc/ssl/server.cer服务器证书--
/opt/CSE/etc/ssl/cert_pwd用于存放解密私钥的对称加密密文文件--
/opt/CSE/apps---
/opt/CSE/apps/ServiceCenter-APP_ROOT-
/opt/CSE/apps/ServiceCenter/conf服务管理中心配置文件目录--
/opt/CSE/apps/ServiceCenter/conf/app.conf应用配置文件--

示例代码

microservice.yaml文件中启用TLS通信的配置示例如下:

servicecomb:
  service:
    registry:
      address: https://127.0.0.1:30100
  rest:
    address: 0.0.0.0:8080?sslEnabled=true
  highway:
    address: 0.0.0.0:7070?sslEnabled=true

#########SSL options
ssl.protocols: TLSv1.2
ssl.authPeer: true
ssl.checkCN.host: true

#########certificates config
ssl.trustStore: trust.jks
ssl.trustStoreType: JKS
ssl.trustStoreValue: Changeme_123
ssl.keyStore: server.p12
ssl.keyStoreType: PKCS12
ssl.keyStoreValue: Changeme_123
ssl.crl: revoke.crl
ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom