Cloud/k8s-CKA

[CKA] 35. Security - TLS통신 이해를 위한 PKI 기본 지식

jinkwon.kim 2023. 9. 17. 14:58
728x90
반응형

개요

k8s의 security를 다루기 위해 기초가 되는 인증서의 생성과정을 알아보겠습니다.

목차 순서대로 대칭키과 비대칭키가 무엇이고 왜 필요한지 그리고 비대칭키의 "공개 키"가 PKI에서 어떻게 사용되며 마지막으로 PKI 기반으로 인증서가 어떻게 만들어지는지 까지 알아보겠습니다. 

목차

1. 대칭키

2. 비대칭기

3. 개인키 / 공개키 

4. PKI

대칭키

개요

암호화와 복호화에 같은 키를 사용하는 방식입니다.

장점

효율성

대칭키 암호화는 비대칭키 암호화에 비해 연산이 빠르며 효율적입니다.

단점

키 관리

대칭키는 둘 이상의 통신 참가자가 동일한 키를 공유해야 합니다. 많은 참가자가 있는 경우 키 관리가 복잡해집니다.

키 교환

안전한 키 교환 메커니즘이 필요합니다. 중간자가 키를 가로채면 통신이 노출될 수 있습니다.

이를 위해서 TLS통신에서 사용되는 것인 비대칭키를 이용한 대칭키 교환 방식입니다.

대칭키 알고리즘 종류

알고리즘 블록크기 키 길이 비고
AES 128비트 128, 192, 256비트 현재 가장 널리 사용되는 표준 암호화 알고리즘입니다.
DES 64비트 56비트 오늘날에는 취약하다고 판단됩니다.
3DES 64비트 112비트 또는 168비트 DES를 세 번 연속적으로 적용한 버전입니다.
Blowfish 64비트 32비트에서 448비트 사이 빠른 암호화 속도와 높은 보안성을 제공합니다.
Twofish 128비트 최대 256비트 Blowfish의 후속 버전입니다.
RC4 N/A (스트림) 40비트에서 2048비트 사이 보안 취약성으로 인해 현재 사용되지 않는 것이 좋습니다.

블록 크기 (Block Size)

블록 크기는 블록 암호화 알고리즘에서 한 번에 처리할 수 있는 데이터의 단위를 나타냅니다

키 길이 (Key Length)

키 길이는 암호화 키의 비트 길이를 나타냅니다. 일반적으로 키 길이가 길면 암호화의 강도가 더 강해집니다.

비대칭키

개요

암호화와 복호화에 서로 다른 키 "공개 키(public key)개인 키(private key)의 쌍"을 사용하는 방식입니다.

데이터를 공개 키로 암호화하면 해당 개인 키로만 복호화할 수 있습니다. 또는 데이터를 개인 키로 암호화하면 해당 공개 키로만  복호화 할수 있습니다.

장점

키 관리

개인 키는 공유될 필요가 없습니다. 통신을 시작할 때 안전하게 공개 키만 교환하면 됩니다.

디지털 서명

비대칭 키는 메시지의 발신자 인증 및 무결성 확인을 위한 디지털 서명에도 사용됩니다.

개인키로 암호화하고 공개키로 복호화하는 원리를 이용합니다.

단점

효율성

대칭키 암호화에 비해 비대칭 키 암호화는 연산이 더 복잡하고 느립니다.

비대칭키 알고리즘 종류

알고리즘명 주요 용도 비고
RSA 암호화, 디지털 서명 가장 널리 사용되는 공개키 암호화 알고리즘입니다.
DSA (Digital Signature Algorithm) 디지털 서명 RSA보다 더 효율적인 디지털 서명을 위해 설계되었습니다.
ElGamal 암호화, 디지털 서명 확산 속성 때문에 일부 환경에서 선호됩니다.
ECC (Elliptic Curve Cryptography) 암호화, 디지털 서명, 키 교환 작은 키 크기로 높은 보안성을 제공합니다. 모바일 환경 등에서 유리합니다.
DH (Diffie-Hellman) 키 교환 통신 양쪽 끝에서 안전하게 비밀 키를 생성하는 데 사용됩니다.

사용법

RSA 암호화 알고리즘을 사용해서 개인키와 공개키를 만들고 이 두키를 사용하여 암호화 및 복호화를 해보겠습니다.

키 생성

개인 키(private key)

openssl genpkey -algorithm RSA -out private_key.pem

공개 키(public key)

openssl rsa -pubout -in private_key.pem -out public_key.pem

암호화

echo "Hello, OpenSSL" > data.txt
openssl pkeyutl -encrypt -in data.txt -pubin -inkey public_key.pem -out data.enc

복호화

openssl pkeyutl -decrypt -in data.enc -inkey private_key.pem -out decrypted_data.txt

PKI

PKI (Public Key Infrastructure)

공개키 암호화와 디지털 서명 기술을 기반으로 한 정보 보안 framework입니다.

위 그림에서 각 요소의 연결 개념을 순서대로 알아보겠습니다.

1, 2 CSR

개요

CSR (Certificate Signing Request)

디지털 인증서를 RA(Registration Authority) 요청할 때 사용하는 파일

역할

  1. 인증서 발급 요청: 사용자 (또는 서버나 장치)가 디지털 인증서를 받기를 원할 때, CSR을 생성하여 해당 인증서 발급기관 (Certificate Authority, CA)에 제출합니다.
  2. 공개키 전달: CSR에는 사용자의 공개키가 포함되어 있습니다. 이렇게 함으로써 CA는 인증서를 생성할 때 이 공개키를 사용하여 해당 인증서를 제작합니다.
  3. 신원 정보 제공: CSR은 사용자의 신원을 나타내는 다양한 정보를 포함합니다. 예를 들면, 조직 이름, 조직 단위, 위치, 국가 코드, 이메일 주소 등이 포함될 수 있습니다. 이 정보는 인증서에 포함됩니다.
  4. 디지털 서명: CSR은 사용자의 개인키로 서명됩니다. 이 서명은 CA가 CSR의 정합성과 원본성을 검증하는 데 사용됩니다. 다시 말해, CSR이 수정되거나 조작되지 않았다는 것을 확인하는 데 필요한 메커니즘입니다.

생성 방법

개인 키와 쌍이 되는 공개 키가 들어가는 CSR를 생성합니다.

개인키 생성

먼저 개인키를 생성합니다. 여기서는 2048비트 RSA 키를 예로 들겠습니다.

openssl genpkey -algorithm RSA -out privatekey.pem

 

CSR 생성

아래 명령 수행시 인증서를 위한 기본 정보를 넣으면 csr이 완성이 됩니다.

openssl req -new -key privatekey.pem -out request.csr

RA

개념

RA (Registration Authority = 등록 기관)

RA는 PKI 시스템에서 사용자의 신분을 검증하고, CA에 인증서 발급/관리 관련 요청을 전달하는 중개자 역할을 합니다. RA는 CA의 작업 부담을 줄이고, 시스템의 전반적인 보안 및 효율성을 높이기 위해 존재합니다.

역할

  1. 신분 확인 및 검증: 사용자가 인증서를 요청할 때, RA는 사용자의 신분을 검증합니다. 이 과정은 문서 검토, 물리적 또는 전자적 방법, 다단계 인증 등 다양한 방식으로 수행될 수 있습니다.
  2. 인증서 발급 요청: 사용자의 신분이 확인되면 RA는 CA에 인증서 발급을 요청합니다. 이때 CSR (Certificate Signing Request) 등 필요한 정보를 CA에 전달합니다.
  3. 인증서 갱신 및 재발급: 사용자의 인증서가 만료되거나 변경이 필요할 경우, RA는 인증서의 갱신 또는 재발급 프로세스를 관리합니다.
  4. 인증서 폐기 요청: 사용자가 인증서를 폐기하고 싶을 경우 (예: 개인키가 유출된 경우) RA는 사용자의 요청을 받아 CA에 전달하여 인증서를 폐기 목록(CRL)에 추가하게 합니다.
  5. 인증서 상태 조회: RA는 때때로 VA (Validation Authority)와 함께 작동하여 인증서의 상태 (예: 유효, 만료, 폐기 등)를 조회하고 이를 사용자에게 제공할 수 있습니다.
  6. 정책 및 절차 준수: RA는 PKI의 정책 및 절차를 준수하면서 인증서 발급 및 관리 작업을 수행합니다.
  7. 사용자 지원: RA는 종종 사용자에게 PKI와 관련된 질문 및 문제에 대한 지원을 제공합니다.

우리나라에서는 은행이 해당역할을 대신합니다.

CA

개념

CA (Certificate Authority = 인증 기관)

PKI (Public Key Infrastructure)에서 CA (Certificate Authority)는 핵심 구성 요소로서 디지털 인증서의 발급, 관리, 저장, 폐기 및 갱신과 관련된 주요 역할을 담당합니다. CA는 사용자, 서버, 응용 프로그램 및 기타 엔터티의 신원을 검증하고 이를 디지털 인증서로 인증하는 중요한 기관입니다.

역할

  1. 인증서 발급: CA는 Registration Authority (RA) 또는 다른 메커니즘을 통해 수신한 인증서 발급 요청(CSR)을 기반으로 디지털 인증서를 발급합니다. 이때, 요청자의 공개키와 신원 정보를 포함한 Certificate Signing Request (CSR)가 사용됩니다.
  2. 인증서 서명: CA는 자신의 개인키를 사용하여 발급하는 모든 인증서에 서명합니다. 이 서명은 인증서의 무결성과 발급 기관의 신원을 검증하는 데 사용됩니다.
  3. 인증서 갱신: 인증서의 유효 기간이 끝나면 해당 인증서를 갱신해야 합니다. CA는 이러한 인증서 갱신 요청을 처리합니다.
  4. 인증서 폐기: 인증서가 손상되거나 개인키가 유출되었을 때 해당 인증서를 폐기해야 합니다. CA는 인증서 폐기 요청을 받아들여 인증서 폐기 목록 (Certificate Revocation List, CRL)에 해당 인증서를 추가합니다.
  5. 인증서 상태 관리: CA는 발급한 인증서의 상태 (예: 유효, 만료, 폐기 등)를 관리하고, 필요한 경우 이 정보를 OCSP (Online Certificate Status Protocol) 서버와 같은 메커니즘을 통해 제공합니다.
  6. 루트 인증서 관리: CA는 자체 인증서인 루트 인증서를 관리합니다. 루트 인증서는 신뢰되는 저장소에 저장되며, 다른 인증서가 검증될 때 참조 기준으로 사용됩니다.
  7. 정책 및 절차 설정: CA는 인증서 발급 및 관리와 관련된 정책 및 절차를 설정하고 유지합니다. 이러한 정책과 절차는 종종 CPS (Certificate Practice Statement)에 문서화됩니다.

추가 설명

CA에서 CSR사용하여 디지털 인증서를 발급하는데 RA가 은행이라고 하면 디지털 인증서는 공인인증서가 됩니다.

디지털 인증서

개념

PKI (Public Key Infrastructure)에서 디지털 인증서는 신원을 증명하는 전자 문서로, 주체(사람, 서버, 장치 등)의 신원 정보와 공개키를 연결하는 역할을 합니다. 이 인증서는 CA (Certificate Authority)에 의해 발급되며, 디지털 환경에서 신원을 확인하고 안전한 통신을 제공하는 데 필수적입니다.

역할

  • 신원 확인: 인증서를 사용하여 서버나 사용자의 신원을 확인할 수 있습니다.
  • 암호화: 공개키 암호화를 사용하여 데이터를 암호화하고 안전하게 전송할 수 있습니다.
  • 디지털 서명: 메시지나 문서에 디지털 서명을 생성하여 전송하는 내용의 무결성과 출처를 확인할 수 있습니다.

주요 구성 요소

  1. 주체의 신원 정보: 인증서 소유자의 이름, 조직, 위치 등의 정보가 포함됩니다.
  2. 주체의 공개키: 인증서 소유자의 공개키가 포함됩니다. 이 공개키는 암호화 또는 디지털 서명 검증과 같은 여러 암호 작업에 사용됩니다.
  3. 유효 기간: 인증서가 발급된 날짜와 만료 날짜가 포함됩니다. 인증서는 특정 기간 동안만 유효합니다.
  4. 인증서 일련번호: 각 인증서는 유일한 일련번호를 가집니다. 이는 인증서의 관리와 추적을 용이하게 합니다.
  5. CA의 디지털 서명: CA는 인증서에 자신의 개인키를 사용하여 디지털 서명을 합니다. 이 서명은 인증서의 무결성과 CA의 신원을 검증하는 데 사용됩니다.
  6. 인증서 정책 및 사용 용도: 인증서의 사용 용도 (예: 서버 인증, 이메일 서명 등) 및 관련된 정책 정보가 포함될 수 있습니다.

전자 서명

디지털 인증서에는 해당 인증서가 CA에서 보증한다는 것을  보장하기 위해서 "전자 서명"을 합니다.

"전자 서명"은 CSR정보의 일부 값을 hash값으로 변경한 후 CA의 "개인 키"로 암호화한 것입니다.

 

CSR에서 hash 생성을 위해서 사용되는 정보는 대개 다음과 같습니다:

  1. 공개 키: CSR은 해당 주체의 공개 키를 포함하며, 이는 나중에 발급받는 인증서에도 포함됩니다.
  2. 주체 정보: 이 정보는 주체의 고유 정보를 나타냅니다. 예를 들어, 서버 인증서의 경우 도메인 이름(CN, Common Name)이 포함될 수 있습니다. 또한 조직 이름, 조직 단위, 지역, 국가 등과 같은 추가적인 정보가 포함될 수도 있습니다.
  3. 알고리즘 및 기타 설정: CSR은 사용된 암호화 알고리즘, 키 길이, 해시 알고리즘 등의 정보도 포함할 수 있습니다.

사설 인증서 생성 방법

CSR (Certificate Signing Request)에서 인증서를 직접 생성하려면, 여러분 자신을 CA (Certificate Authority)로 간주하고, 이 CA의 개인 키를 사용하여 CSR에 서명하여 인증서를 만들어야 합니다. 

여기서는 openssl을 사용하고 개인 키는 CSR 만들 때사용했던 것을 이용하겠습니다. 

 

openssl x509 -req -days 365 -in request.csr -signkey privatekey.pem -out selfsigned.crt

 

그러면 결과물로 selfsigned.crt라는 디지털 인증서가 나오게 됩니다. 

인증서 파일 format 종류

https://www.sslcert.co.kr/guides/kb/54

CRL

개념

CRL (Certificate Revocation List)

CRL은 Certificate Authority (CA)에 의해 발행된 디지털 인증서 중에서 더 이상 신뢰할 수 없게 된 인증서의 목록을 나타냅니다.

역할 및 특징

  1. 인증서 취소:
    • 인증서의 소유자의 개인키가 노출되었거나, 인증서에 잘못된 정보가 포함되었거나, 인증서를 발행한 CA의 키가 손상된 경우와 같은 다양한 이유로 인해 인증서는 취소될 수 있습니다.
    • 취소된 인증서는 CRL에 추가됩니다.
  2. 검증 프로세스의 일부:
    • 사용자나 시스템이 디지털 인증서를 사용하여 인증을 시도할 때, 그 인증서가 여전히 유효한지 확인하기 위해 CRL을 확인할 수 있습니다.
    • 인증서가 CRL에 나열되어 있다면 해당 인증서는 더 이상 신뢰할 수 없으므로 인증 요청이 거부됩니다.
  3. 정기적 갱신:
    • CRL은 주기적으로 갱신됩니다. 새로운 인증서가 취소되거나 기존의 취소된 인증서의 취소 사유가 해결된 경우 CRL이 업데이트됩니다.
  4. 유효기간:
    • CRL에는 유효기간이 있습니다. 이는 CRL의 신뢰성을 유지하고, 오래된 정보를 기반으로 한 결정을 피하기 위함입니다.
  5. CA의 서명:
    • CRL은 발행 CA에 의해 디지털로 서명되어, CRL의 무결성과 출처를 검증할 수 있습니다.

VA

개념

VA (Validation Authority)

인증서의 상태와 유효성을 실시간으로 확인하는 역할을 합니다. VA는 CA (Certificate Authority)와 밀접하게 작동하며, CA에서 발급된 인증서의 상태에 대한 정보를 저장하고 관리합니다.

역할

  1. 인증서 상태 확인: VA는 인증서의 현재 상태 (예: 유효, 취소됨, 만료됨)를 신속하게 확인하고 응답합니다. 이를 통해 인증서를 사용하는 클라이언트나 서버가 실시간으로 인증서의 유효성을 검증할 수 있습니다.
  2. CRL (Certificate Revocation List)와의 상호 작용: 일부 VA는 CA로부터 CRL 정보를 가져와 인증서의 취소 상태를 실시간으로 알려줍니다. VA는 이 CRL 정보를 사용하여 요청받은 인증서의 상태를 확인합니다.
  3. OCSP (Online Certificate Status Protocol) 응답: VA는 종종 OCSP 응답자 (responder)로서의 역할을 수행합니다. OCSP는 인증서의 상태를 실시간으로 확인하는 프로토콜입니다. 클라이언트는 인증서의 상태를 확인하기 위해 OCSP 요청을 VA에 보내고, VA는 해당 인증서의 상태에 대한 OCSP 응답을 반환합니다.
  4. 부하 분산: 큰 규모의 PKI 환경에서는 많은 인증서 상태 확인 요청이 발생할 수 있습니다. VA는 이러한 요청을 처리하는 부하를 CA에서 분산시켜, CA의 성능과 가용성을 향상하는 역할을 할 수 있습니다.
  5. 중앙 집중식 인증서 상태 관리: VA를 사용하면 인증서 상태 정보를 중앙 집중식으로 관리하고 업데이트할 수 있습니다. 이를 통해 PKI 운영자는 인증서의 유효성 관련 데이터를 더 효과적으로 관리할 수 있습니다.

Web Server에 인증서 등록

web-server에 인증서를 등록하는 방법은 web server에 "인증서"와 "개인키"를 넣어주면 됩니다. 

다은 nginx의 인증서를 등록하는 방법입니다.

server.crt : 인증서

server.key : 개인키

설정 

server {
    listen 443 ssl;
    ssl_certificate /path/to/server.crt;
    ssl_certificate_key /path/to/server.key;
    ...
}

정리

본 포스트에서는 PKI 시스템을 이용해서 인증서가 어떻게 만들어지는지 알아보았습니다.

한 줄로 요약하면 

 

"인증서"를 만들기 위해서 개인키로 공개키가 포함된 CSR을 만들고, CSR에 CA의 "개인키"로 전자 서명한 것이 "인증서"

 

라고 요약 할 수 있습니다.

Next Post

[CKA] 36. Security - TLS 통신과정

728x90
반응형