Compartir a través de


Certificados ECDSA y RSA para Puerta de enlace de aplicaciones para contenedores

La criptografía es fundamental para garantizar la privacidad, integridad y seguridad de los datos a medida que se transmite entre un cliente y un servidor en una red. Dos algoritmos criptográficos ampliamente adoptados para el cifrado asimétrico son Rivest-Shamir-Adleman (RSA) y Elliptic Curve Digital Signature Algorithm (ECDSA).

  • El cifrado asimétrico RSA se introdujo en los años 70 y tiene está ampliamente adoptado en dispositivos hoy en día. RSA implementa un enfoque matemático sencillo para la criptografía, lo que ayuda a la adopción.
  • ECDSA es un algoritmo de cifrado asimétrico y sucesor del algoritmo de firma digital (DSA). ECDSA implementa longitudes de clave más cortas que RSA, lo que permite un excelente rendimiento y escalabilidad, a la vez que conserva una seguridad sólida. ECDSA se introdujo en los años 90, por lo que es posible que algunos dispositivos heredados no puedan negociar el algoritmo.

Implementación en Puerta de enlace de aplicaciones para contenedores

Para proporcionar flexibilidad, Puerta de enlace de aplicaciones para contenedores admite certificados ECDSA y RSA. Un cliente de escucha puede hacer referencia a ECDSA o RSA forzando un algoritmo de cifrado preferido, o ambos pueden admitirse en paralelo. La ejecución de ambos algoritmos en paralelo permite a los clientes heredados y modernos negociar una conexión segura a través de RSA, mientras que los clientes que admiten ECDSA pueden aprovechar el rendimiento y la seguridad mejorados.

La configuración de los certificados usados con Puerta de enlace de aplicaciones para contenedores se define dentro de los recursos de entrada o puerta de enlace dentro de Kubernetes. La clave pública y privada se define como un secreto de Kubernetes y se hace referencia por nombre desde los recursos de puerta de enlace o entrada. No se requiere ninguna designación en el recurso secreto para especificar si el certificado es RSA o ECDSA. Puerta de enlace de aplicaciones para contenedores se programa en función de los detalles del certificado proporcionados.

Puerta de enlace de aplicaciones para contenedores proporciona tres variaciones para el uso de secretos RSA y ECDSA:

  • Dos secretos: un secreto que contiene un certificado RSA, el otro que contiene un certificado ECDSA
  • Un secreto que contiene un certificado RSA
  • Un secreto que contiene un certificado ECDSA

Diagrama que muestra Puerta de enlace de aplicaciones para contenedores con tres variaciones de configuraciones de certificado.

Configuración de certificados ECDSA y RSA en el mismo cliente de escucha

  1. Configuración de secretos de Kubernetes

Se crean dos recursos secretos, cada uno con su propio certificado. Se genera un certificado ECDSA y el otro 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. Hacer referencia a los secretos a través de un cliente de escucha

Los certificados ECDSA y RSA en el mismo cliente de escucha de la API de puerta de enlace son compatibles con dos referencias de certificado. Se admite un máximo de dos certificados: uno ECDSA y uno 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