你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn。
在网络上的客户端和服务器之间传输数据时,加密对于确保数据的隐私性、完整性和安全性至关重要。 两种广泛采用的非对称加密算法是 Rivest-Shamir-Adleman (RSA) 和椭圆曲线数字签名算法 (ECDSA)。
- RSA 非对称加密于 1970 年代推出,如今已在设备中广泛采用。 RSA 对加密实现一种简单的数学方法,使其采用率得到进一步增长。
- ECDSA 是一种非对称加密算法,是数字签名算法 (DSA) 的后继者。 ECDSA 实现的密钥长度比 RSA 更短,从而可以实现出色的性能和可伸缩性,同时仍然保持强大的安全性。 ECDSA 于 1990 年代推出,因此某些传统设备可能无法协商该算法。
适用于容器的应用程序网关中的实现
为了提供灵活性,适用于容器的应用程序网关支持 ECDSA 和 RSA 证书。 侦听器可以引用 ECDSA 或 RSA 来强制实施首选加密算法,或者可以同时支持两者。 同时运行这两种算法使传统和新式客户端都可以通过 RSA 协商安全连接,而支持 ECDSA 的客户端可以利用增强的性能和安全性。
与适用于容器的应用程序网关一起使用的证书配置是在 Kubernetes 中的网关或入口资源中定义的。 公钥和私钥定义为 Kubernetes 机密,通过网关或入口资源按名称进行引用。 不需要在机密资源中指定证书是 RSA 还是 ECDSA。 适用于容器的应用程序网关是根据提供的证书详细信息编程的。
适用于容器的应用程序网关提供了三种使用 RSA 和 ECDSA 机密的变体:
- 两个机密:一个机密包含 RSA 证书,另一个机密包含 ECDSA 证书
- 一个包含 RSA 证书的机密
- 一个包含 ECDSA 证书的机密
在同一侦听器上配置 ECDSA 和 RSA 证书
- 配置 Kubernetes 机密
将创建两个机密资源,每个资源都有自己的证书。 一个证书是生成的 ECDSA,另一个是 RSA。
apiVersion: v1
kind: Secret
metadata:
name: rsa-tls-secret
namespace: test-infra
data:
tls.crt: <base64encodedpublickey>
tls.key: <base64encodedprivatekey>
type: kubernetes.io/tls
---
apiVersion: v1
kind: Secret
metadata:
name: ecdsa-tls-secret
namespace: test-infra
data:
tls.crt: <base64encodedpublickey>
tls.key: <base64encodedprivatekey>
type: kubernetes.io/tls
- 通过侦听器引用机密
支持通过提供两个证书引用在网关 API 中的同一侦听器上使用 ECDSA 和 RSA 证书。 最多支持两个证书:一个 ECDSA 和一个 RSA。
apiVersion: gateway.networking.k8s.io/v1
kind: Gateway
metadata:
annotations:
alb.networking.azure.io/alb-name: alb-test
alb.networking.azure.io/alb-namespace: alb-test-infra
name: gateway-01
namespace: test-infra
spec:
gatewayClassName: azure-alb-external
listeners:
- allowedRoutes:
namespaces:
from: All
name: http-listener
port: 80
protocol: HTTP
- allowedRoutes:
namespaces:
from: All
name: https-listener
port: 443
protocol: HTTPS
tls:
mode: Terminate
certificateRefs:
- kind : Secret
group: ""
name: ecdsa-tls-secret
namespace: test-infra
- kind : Secret
group: ""
name: rsa-tls-secret
namespace: test-infra