场景描述

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

外部服务通信配置

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

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

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

    cse:
      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]

常见的tag如下表:

项目 tag
服务中心 sc.consumer
配置中心 cc.consumer
看板中心 mc.consumer
Rest服务端 rest.provider
Highway服务端 highway.provider
Rest客户端 rest.consumer
Highway客户端 highway.consumer
auth客户端 apiserver.consumer

一般不需要配置tag,正常情况分为三类:1、连接CSE内部服务 2、作为服务端 3、作为客户端 所以如果这三类要求的证书不一致,那么需要使用tag来区分

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

配置项 默认值 取值范围 是否必选 含义 注意
ssl.engine jdk - ssl协议,提供jdk/openssl选择 默认为jdk
ssl.protocols TLSv1.2 - 协议列表 使用逗号分隔
ssl.ciphers TLS_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.authPeer true - 是否认证对端 -
ssl.checkCN.host true - 是否对证书的CN进行检查 该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用rest通道有效。对于Provider端、highway通道等无效。检查CN的目的是防止服务器被钓鱼,参考标准定义:https://tools.ietf.org/html/rfc2818。
ssl.trustStore trust.jks - 信任证书文件 -
ssl.trustStoreType JKS - 信任证书类型 -
ssl.trustStoreValue - - 信任证书密码 -
ssl.keyStore server.p12 - 身份证书文件 -
ssl.keyStoreType PKCS12 - 身份证书类型 -
ssl.keyStoreValue - - 身份证书密码 -
ssl.crl revoke.crl - 吊销证书文件 -
ssl.sslCustomClass - com.huawei.paas.foundation.ssl.SSLCustom的实现类 SSLCustom类的实现,用于开发者转换密码、文件路径等。 -

说明

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

服务中心的证书配置

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

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

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

表3 服务中心配置文件

配置项 默认值 取值范围 是否必选 含义 注意
ssl_protocols TLSv1.2 - 通信使用的SSL版本 -
ssl_ciphers TLS_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通信的配置示例如下:

cse:
  service:
    registry:
      address: https://127.0.0.1:30100
  config:
    client:
      serverUri: https://127.0.0.1:30103
  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

results matching ""

    No results matching ""