你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

适用于容器的应用程序网关的 ECDSA 和 RSA 证书

在网络上的客户端和服务器之间传输数据时,加密对于确保数据的隐私性、完整性和安全性至关重要。 两种广泛采用的非对称加密算法是 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 证书

  1. 配置 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
  1. 通过侦听器引用机密

支持通过提供两个证书引用在网关 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