암호화는 네트워크의 클라이언트와 서버 간에 전송되는 데이터의 개인 정보 보호, 무결성 및 보안을 보장하는 데 필수적입니다. 비대칭형 암호화를 위해 널리 채택되는 두 가지 암호화 알고리즘은 RSA(Rivest-Shamir-Adleman)와 ECDSA(타원 곡선 디지털 서명 알고리즘)입니다.
- RSA 비대칭형 암호화는 1970년대에 도입되었으며 오늘날 광범위한 디바이스에 채택되고 있습니다. RSA는 암호화에 대한 간단한 수학적 방식을 구현하여 채택을 돕습니다.
- ECDSA는 비대칭형 암호화 알고리즘이자 DSA(디지털 서명 알고리즘)의 후속 버전입니다. ECDSA는 RSA보다 짧은 키 길이를 구현하여 뛰어난 성능과 확장성을 제공하는 동시에 강력한 보안을 보존합니다. ECDSA는 1990년대에 도입되었으므로 일부 레거시 디바이스에서는 알고리즘을 협상하지 못할 수도 있습니다.
컨테이너용 Application Gateway 구현
유연성을 제공하기 위해 컨테이너용 Application Gateway는 ECDSA 및 RSA 인증서를 모두 지원합니다. 수신기는 기본 암호화 알고리즘을 강제하는 ECDSA 또는 RSA를 참조하거나 둘 다 병렬로 지원할 수 있습니다. 두 알고리즘을 병렬로 실행하면 레거시 클라이언트와 최신 클라이언트 모두 RSA를 통해 보안 연결을 협상할 수 있으며, ECDSA를 지원하는 클라이언트는 향상된 성능과 보안을 활용할 수 있습니다.
컨테이너용 Application Gateway와 함께 사용되는 인증서 구성은 Kubernetes 내의 게이트웨이 또는 수신 리소스 내에서 정의됩니다. 공용 및 프라이빗 키는 Kubernetes 비밀로 정의되며 게이트웨이 또는 수신 리소스의 이름으로 참조됩니다. 인증서가 RSA인지 ECDSA인지 지정하기 위해 비밀 리소스 내에서 지정할 필요는 없습니다. 컨테이너용 Application Gateway는 제공된 인증서 세부 정보를 기반으로 프로그래밍됩니다.
컨테이너용 Application Gateway는 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