服务网格ASM使用FAQ之(3):如何在ASM网关中通过配置TLS协议版本来增强安全性

简介: 包括TLS v1.0在内的早期TLS版本存在已知的安全问题,并且使用功能强大的工具和系统进行了解密,导致传输中的数据泄露。因此,一个增强网站安全性的最佳做法是禁用早期版本的TLS(v1.0和v1.1)并仅启用TLS v1.2及更高版本。同时,禁用TLS v1.2中的弱密码也非常重要。本文介绍如何在ASM网关配置TLS协议版本,增强网站安全性。

本文介绍如何在ASM网关配置TLS协议版本,增强网站安全性。

前提条件

背景信息

包括TLS v1.0在内的早期TLS版本存在已知的安全问题,并且使用功能强大的工具和系统进行了解密,导致传输中的数据泄露。因此,一个增强网站安全性的最佳做法是禁用早期版本的TLS(v1.0和v1.1)并仅启用TLS v1.2及更高版本。同时,禁用TLS v1.2中的弱密码也非常重要。


准备网关使用的证书和私钥

以域名aliyun.com为例,为网关生成证书和私钥,并保存为Secret。例如,如果您已经拥有针对aliyun.com可用的证书和私钥,需要将密钥命名为aliyun.com.key,证书命名为aliyun.com.crt;如果没有,可以通过openssl执行以下步骤来生成证书和密钥。



  1. 执行以下命令,创建根证书和私钥。
openssl req -x509 -sha256 -nodes -days 365 -newkey rsa:2048 -subj '/O=myexample Inc./CN=aliyun.com' -keyout aliyun.root.key -out aliyun.root.crt
  1. 执行以下命令,为aliyun.com服务器生成证书和私钥。
openssl req -out aliyun.com.csr -newkey rsa:2048 -nodes -keyout aliyun.com.key -subj "/CN=aliyun.com/O=myexample organization"
openssl x509 -req -days 365 -CA aliyun.root.crt -CAkey aliyun.root.key -set_serial 0 -in aliyun.com.csr -out aliyun.com.crt
  1. 在入口网关Pod所在的集群对应的kubeconfig环境下,执行以下命令,在istio-system命名空间中创建包含证书和私钥的Secret。
kubectl create -n istio-system secret tls myexample-tlsversion-credential --key=aliyun.com.key --cert=aliyun.com.crt


创建网关规则



  1. 登录ASM控制台
  2. 在左侧导航栏,选择服务网格 > 网格管理
  3. 网格管理页面,找到待配置的实例,单击实例的名称或在操作列中单击管理
  4. 在网格详情页面左侧导航栏选择流量管理中心 > 网关规则,然后在右侧页面单击使用YAML创建
  5. 创建页面,选择目标命名空间和任意场景模板,配置如下YAML。本文以default命名空间为例,YAML中设置minProtocolVersion值为TLSV1_2,表示禁用TLS v1.0和v1.1。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:  name: mysdsgateway-tlsversion-sample
spec:  selector:    istio: ingressgateway
  servers:    - hosts:        - '*'      port:        name: https
        number: 443        protocol: HTTPS
      tls:        credentialName: myexample-tlsversion-credential
        minProtocolVersion: TLSV1_2
        mode: SIMPLE



创建虚拟服务

  1. 在网格详情页面左侧导航栏选择流量管理中心 > 虚拟服务,然后在右侧页面单击使用YAML创建
  2. 创建页面,选择目标命名空间和任意场景模板,配置如下YAML。
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:  name: bookinfo-tlsversion-sample
spec:  gateways:    - mysdsgateway-tlsversion-sample
  hosts:    - '*'  http:    - match:        - uri:            exact: /productpage
        - uri:            prefix: /static
        - uri:            exact: /login
        - uri:            exact: /logout
        - uri:            prefix: /api/v1/products
      route:        - destination:            host: productpage
            port:              number: 9080


验证TLS版本

testssl.sh是一个免费的命令行工具,可以检查服务器在任何端口上的服务是否支持TLS/SSL密钥、协议以及一些加密缺陷等。本文使用testssl.sh对TLS版本进行验证。


  1. 执行以下命令,以容器方式运行testssl.sh
docker run --rm -ti  registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://网关地址/productpage


 预期输出:

Testing protocols via sockets except NPN+ALPN
SSLv2      not offered (OK)SSLv3      not offered (OK)TLS 1      not offered
TLS 1.1    not offered
TLS 1.2    offered (OK)TLS 1.3    offered (OK): final
......
Running client simulations (HTTP) via sockets
Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)IE 6 XP                      No connection
IE 8 Win 7                   No connection
IE 8 XP                      No connection
IE 11 Win 7                  No connection
IE 11 Win 8.1                No connection
IE 11 Win Phone 8.1          No connection
IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)Edge 101 Win 1021H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519)Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)Java 7u25                    No connection
Java 8u161                   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256)Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519)OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519)Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)



由预期输出得到,TLS 1和TLS 1.1版本均为not offered,说明已禁用这两个版本;TLS 1.2和1.3版本均为offered,说明支持这两个版本。
在客户端的模拟请求中,也可以看到只有支持TLS 1.2和1.3版本的客户端才能建立连接。




如何严格限制到TLS 1.2版本


若您需要严格限制到TLS 1.2版本,请参照以下步骤。

  1. 参照如下YAML,修改Gateway网格规则配置,设置maxProtocolVersionminProtocolVersion均为TLSV1_2。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:  name: mysdsgateway
  namespace: default
spec:  selector:    istio: ingressgateway
  servers:    - hosts:        - '*'      port:        name: https
        number: 443        protocol: HTTPS
      tls:        credentialName: myexample-credential
        maxProtocolVersion: TLSV1_2
        minProtocolVersion: TLSV1_2
        mode: SIMPLE


2.执行以下命令,进行验证测试。

docker run --rm-ti  registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://网关地址/productpage


3.预期输出:

Testing protocols via sockets except NPN+ALPN
 SSLv2      not offered (OK) SSLv3      not offered (OK) TLS 1      not offered
 TLS 1.1    not offered
 TLS 1.2    offered (OK) TLS 1.3    not offered and downgraded to a weaker protocol
......
 Running client simulations (HTTP) via sockets
 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) Android 7.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) Android 8.1 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Android 9.0 (native)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Android 10.0 (native)        TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Android 11 (native)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Android 12 (native)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Chrome 79 (Win 10)           TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Chrome 101 (Win 10)          TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Firefox 66 (Win 8.1/10)      TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Firefox 100 (Win 10)         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  No connection
 IE 11 Win 8.1                No connection
 IE 11 Win Phone 8.1          No connection
 IE 11 Win 10                 TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) Edge 15 Win 10               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Edge 101 Win 1021H2         TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Safari 12.1 (iOS 12.2)       TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Safari 13.0 (macOS 10.14.6)  TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Safari 15.4 (macOS 12.3.1)   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) Java 7u25                    No connection
 Java 8u161                   TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) Java 11.0.2 (OpenJDK)        TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) Java 17.0.3 (OpenJDK)        TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519) go 1.17.8                    TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519) LibreSSL 2.8.3 (Apple)       TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519) OpenSSL 1.0.2e               TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256) OpenSSL 1.1.0l (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519) OpenSSL 1.1.1d (Debian)      TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519) OpenSSL 3.0.3 (git)          TLSv1.2   ECDHE-RSA-CHACHA20-POLY1305       253 bit ECDH (X25519) Apple Mail (16.0)            TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       256 bit ECDH (P-256)Thunderbird (91.9)           TLSv1.2   ECDHE-RSA-AES128-GCM-SHA256       253 bit ECDH (X25519)


由预期输出得到,TLS 1和TLS 1.1版本均为not offered,TLS 1.3版本为not offered and downgraded to a weaker protocol,说明已禁用这三个版本;TLS 1.2版本为offered,说明只支持TLS 1.2版本。


在客户端的模拟请求中,也可以看到只有支持TLS 1.2版本的客户端才能建立连接。



如何严格限制到TLS 1.3版本

若您需要严格限制到TLS 1.3版本,请参照以下步骤。

  1. 参照如下YAML,修改Gateway网格规则配置,设置maxProtocolVersionminProtocolVersion均为TLSV1_3。
apiVersion: networking.istio.io/v1beta1
kind: Gateway
metadata:  name: mysdsgateway
  namespace: default
spec:  selector:    istio: ingressgateway
  servers:    - hosts:        - '*'      port:        name: https
        number: 443        protocol: HTTPS
      tls:        credentialName: myexample-credential
        maxProtocolVersion: TLSV1_3
        minProtocolVersion: TLSV1_3
        mode: SIMPLE


2.执行以下命令,进行验证测试。

docker run --rm-ti  registry.cn-hangzhou.aliyuncs.com/acs/testssl.sh https://网关地址/productpage


3.预期输出:

Testing protocols via sockets except NPN+ALPN
SSLv2      not offered (OK)SSLv3      not offered (OK)TLS 1      not offered
TLS 1.1    not offered
TLS 1.2    not offered
TLS 1.3    offered (OK): final
......
Running client simulations (HTTP) via sockets
 Browser                      Protocol  Cipher Suite Name (OpenSSL)       Forward Secrecy
------------------------------------------------------------------------------------------------
 Android 6.0                  No connection
 Android 7.0 (native)         No connection
 Android 8.1 (native)         No connection
 Android 9.0 (native)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Android 10.0 (native)        TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Android 11 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Android 12 (native)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Chrome 79 (Win 10)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Chrome 101 (Win 10)          TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Firefox 66 (Win 8.1/10)      TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Firefox 100 (Win 10)         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) IE 6 XP                      No connection
 IE 8 Win 7                   No connection
 IE 8 XP                      No connection
 IE 11 Win 7                  No connection
 IE 11 Win 8.1                No connection
 IE 11 Win Phone 8.1          No connection
 IE 11 Win 10                 No connection
 Edge 15 Win 10               No connection
 Edge 101 Win 1021H2         TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Safari 12.1 (iOS 12.2)       TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519) Safari 13.0 (macOS 10.14.6)  TLSv1.3   TLS_CHACHA20_POLY1305_SHA256      253 bit ECDH (X25519) Safari 15.4 (macOS 12.3.1)   TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) Java 7u25                    No connection
 Java 8u161                   No connection
 Java 11.0.2 (OpenJDK)        TLSv1.3   TLS_AES_128_GCM_SHA256            256 bit ECDH (P-256) Java 17.0.3 (OpenJDK)        TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519) go 1.17.8                    TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519) LibreSSL 2.8.3 (Apple)       No connection
 OpenSSL 1.0.2e               No connection
 OpenSSL 1.1.0l (Debian)      No connection
 OpenSSL 1.1.1d (Debian)      TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519) OpenSSL 3.0.3 (git)          TLSv1.3   TLS_AES_256_GCM_SHA384            253 bit ECDH (X25519) Apple Mail (16.0)            No connection
Thunderbird (91.9)           TLSv1.3   TLS_AES_128_GCM_SHA256            253 bit ECDH (X25519)



由预期输出得到,TLS 1、TLS 1.1和TLS 1.2版本均为not offered,说明已禁用这三个版本;TLS 1.3版本为offered,说明只支持TLS 1.3版本。
在客户端的模拟请求中,也可以看到只有支持TLS 1.3版本的客户端才能建立连接。

相关文章
|
运维 Kubernetes 安全
利用服务网格实现全链路mTLS(一):在入口网关上提供mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,用于简化服务治理,包括流量管理和拆分、安全认证及网格可观测性,有效减轻开发运维负担。ASM支持通过mTLS提供服务,要求客户端提供证书以增强安全性。本文介绍如何在ASM入口网关上配置mTLS服务并通过授权策略实现特定用户的访问限制。首先需部署ASM实例和ACK集群,并开启sidecar自动注入。接着,在集群中部署入口网关和httpbin应用,并生成mTLS通信所需的根证书、服务器证书及客户端证书。最后,配置网关上的mTLS监听并设置授权策略,以限制特定客户端对特定路径的访问。
599 2
|
运维 Cloud Native 安全
带你读《2022龙蜥社区全景白皮书》——6.2.2 龙蜥社区助力云原生网关实现TLS硬件加速 - 上海费芮网络科技
带你读《2022龙蜥社区全景白皮书》——6.2.2 龙蜥社区助力云原生网关实现TLS硬件加速 - 上海费芮网络科技
462 75
|
Kubernetes 安全 Cloud Native
解锁安全新纪元:利用服务网格Istio,打造全链路mTLS加密隧道,从入口网关到出口网关,守护数据安全的每一步
【8月更文挑战第2天】随着云原生技术的发展,服务网格(Service Mesh)如Istio已成为微服务架构的核心,通过双向TLS(mTLS)确保通信安全。首先,在Kubernetes部署Istio以管理服务通信。接着,配置入口网关实现所有入向流量的加密处理,防止数据泄露。最后,通过配置Sidecar代理如Envoy,确保服务网格安全访问外部mTLS服务,从而构建起全链路的数据安全防护。
742 11
|
Kubernetes 安全 数据安全/隐私保护
利用服务网格实现全链路mTLS(二):通过出口网关访问外部mTLS服务
阿里云服务网格(Service Mesh,简称ASM)提供了一个全托管式的服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、服务间通信安全及网格可观测性。ASM出口网关统一管理网格内的出口流量,实现全链路加密通信与精细访问控制。本文介绍如何配置ASM出口网关以管理出口流量并发起mTLS通信,涉及配置ServiceEntry、创建出口网关、设置虚拟服务及目标规则等步骤,最终实现安全可控的mTLS服务访问。
556 3
|
负载均衡 测试技术 数据处理
阿里云服务网格ASM的流量标签及路由功能之(4): 基于ASM实现全链路灰度发布
当您需要在多个服务间实现全链路的灰度发布时,可以通过配置TrafficLabel来识别流量特征,将网关入口流量分为正常流量和灰度流量。灰度流量特征会在请求调用链经过的各个服务间进行传递,从而实现全链路灰度发布。本文介绍如何通过TrafficLabel能力来实现微服务的全链路灰度发布。
809 57
阿里云服务网格ASM的流量标签及路由功能之(4): 基于ASM实现全链路灰度发布
|
域名解析 运维 网络协议
使用ACME CA为ASM网关签发证书
阿里云服务网格ASM提供全托管式服务网格平台,兼容Istio开源服务网格,简化服务治理,包括流量管理、认证安全和可观测性。产品文档:[https://help.aliyun.com/zh/asm](https://help.aliyun.com/zh/asm)。本文指导如何使用cert-manager和ACME CA为ASM网关获取HTTPS证书,涉及ACME协议、挑战验证及Let's Encrypt的使用。
849 2
|
负载均衡 Kubernetes 算法
服务网格 ASM 负载均衡算法全面解析
在本文中,笔者将解析服务网格的多种负载均衡算法的实现原理和使用场景,为服务网格负载均衡算法的选择提供参考。
|
运维 Kubernetes Cloud Native
服务网格实施周期缩短 50%,丽迅物流基于阿里云 ACK 和 ASM 的云原生应用管理实践
通过本文介绍丽迅物流关于基于阿里云服务网格 ASM 如何加速企业业务云原生化进程的实践经验。
|
弹性计算 运维 Serverless
使用ASM Serverless网关支撑各种弹性业务场景
ASM Serverless网关就是基于虚拟节点和ECI提供的一种Serverless 网关形态,充分支撑各种弹性和免节点运维场景的用户诉求。
408 1
阿里云服务网格 ASM 2023 年 5 月产品动态
阿里云服务网格 ASM 2023 年 5 月产品动态