场景描述

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

外部服务通信配置

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

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

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

    1. servicecomb:
    2. rest:
    3. address: 0.0.0.0:8080?sslEnabled=true
    4. highway:
    5. address: 0.0.0.0:7070?sslEnabled=true

证书配置

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

  1. 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、连接内部服务 2、作为服务端 3、作为客户端 所以如果这三类要求的证书不一致,那么需要使用tag来区分

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

配置项默认值取值范围是否必选含义注意
ssl.enginejdk-ssl协议,提供jdk/openssl选择默认为jdk
ssl.protocolsTLSv1.2-协议列表使用逗号分隔
ssl.ciphersTLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384,
TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
-算法列表使用逗号分隔
ssl.authPeertrue-是否认证对端-
ssl.checkCN.hosttrue-是否对证书的CN进行检查该配置项只对Consumer端,并且使用http协议有效,即Consumser端使用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签发的,不同的提供者都使用一份证书存储介质,这份介质同时给微服务访问服务中心和配置中心使用)。

示例代码

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

  1. servicecomb:
  2. service:
  3. registry:
  4. address: https://127.0.0.1:30100
  5. config:
  6. client:
  7. serverUri: https://127.0.0.1:30103
  8. rest:
  9. address: 0.0.0.0:8080?sslEnabled=true
  10. highway:
  11. address: 0.0.0.0:7070?sslEnabled=true
  12. #########SSL options
  13. ssl.protocols: TLSv1.2
  14. ssl.authPeer: true
  15. ssl.checkCN.host: true
  16. #########certificates config
  17. ssl.trustStore: trust.jks
  18. ssl.trustStoreType: JKS
  19. ssl.trustStoreValue: Changeme_123
  20. ssl.keyStore: server.p12
  21. ssl.keyStoreType: PKCS12
  22. ssl.keyStoreValue: Changeme_123
  23. ssl.crl: revoke.crl
  24. ssl.sslCustomClass: org.apache.servicecomb.demo.DemoSSLCustom