SSL 인증서 완벽 가이드: 핵심 개념부터 Gateway 배포까지

September 2, 2024

Technology

현재 HTTPS는 네트워크 통신의 주류 방법이 되었으며, 특히 민감한 정보 전송이 필요한 시나리오에서 다양한 웹사이트와 서비스에 널리 사용되고 있습니다. HTTPS는 SSL/TLS 프로토콜을 기반으로 하여 암호화된 통신 채널을 제공하며, 데이터 전송의 보안과 무결성을 보장하여 데이터 유출 및 변조를 효과적으로 방지합니다.

SSL 인증서는 SSL/TLS 프로토콜의 핵심 구현체로서, 서버 신원을 검증하고 데이터 전송을 보호하는 데 중요한 역할을 합니다.

SSL 인증서의 핵심 개념

SSL 인증서에 대해 깊이 이해하기 전에, 그 작동의 핵심 요소인 공개 키와 개인 키의 개념을 이해해야 합니다.

  • 공개 키: 정보를 암호화하는 데 사용됩니다. 공개 키로 암호화된 정보는 해당 개인 키로만 복호화하여 읽을 수 있습니다.

  • 개인 키: 정보를 복호화하는 데 사용됩니다. 공개 키와 일대일 관계를 가지며, 해당 공개 키로 암호화된 정보만 복호화할 수 있습니다.

공개 키와 개인 키는 알고리즘을 통해 한 쌍으로 생성되며, 수학적으로 연관되어 있지만 서로를 유도할 수는 없습니다. 공개 키는 공개적으로 사용 가능하며 누구나 접근할 수 있지만, 개인 키는 기밀로 유지되며 키 소유자만 알고 있습니다. 이는 비대칭 암호화 알고리즘의 기초입니다.

예를 들어, 은행 웹사이트와 암호화된 정보를 교환하려는 경우 기본 프로세스는 다음과 같습니다:

  1. 은행은 먼저 공개 키를 제공합니다. 이 공개 키는 안전하게 공개됩니다(예: 은행의 공식 웹사이트나 신뢰할 수 있는 제3자 인증 기관을 통해). 공개 키는 은행이 암호화된 정보를 수신하는 데 사용하는 키 쌍의 일부입니다.

  2. 사용자는 이 공개 키를 사용하여 은행에 보낼 개인 정보를 암호화합니다. 이 암호화는 해당 개인 키(즉, 은행)를 가진 사람만이 정보를 복호화하고 읽을 수 있도록 보장합니다. 암호화된 데이터가 다른 사람에게 가로채더라도, 은행만이 개인 키를 가지고 있기 때문에 복호화할 수 없습니다.

  3. 은행은 암호화된 정보를 받으면 개인 키를 사용하여 복호화합니다. 개인 키는 은행에만 유일하며 공개 키와 쌍을 이루기 때문에, 은행은 사용자가 보낸 개인 정보를 성공적으로 복호화하고 읽을 수 있습니다.

  4. 은행은 정보를 복호화하고 읽은 후, 사용자의 요청이나 지시에 따라 처리합니다. 필요한 경우, 은행은 사용자의 공개 키를 사용하여 응답을 암호화하여 응답의 보안을 보장할 수 있습니다.

이 암호화 통신 프로세스는 완벽해 보이지만, 한 가지 위험이 있습니다: 처음 받은 공개 키가 은행이 아닌 은행을 사칭한 사기꾼으로부터 온 것일 수 있습니다. 이는 사용자가 이 가짜 공개 키를 사용하여 암호화하면, 가로챈 정보가 해당 가짜 개인 키로 복호화되어 정보 유출로 이어질 수 있다는 것을 의미합니다.

이 문제를 해결하기 위해, 공개 키의 합법성을 검증할 수 있는 메커니즘이 필요합니다. 이때 인증 기관(Certificate Authority, CA)의 개념이 등장합니다. CA는 공개 키의 진위를 검증하는 데 사용되는 CA 인증서를 발급하는 역할을 합니다. 공개 키가 불법적이라면 암호화에 사용되어서는 안 됩니다.

SSL 인증서는 CA가 발급한 CA 인증서의 일종입니다. 여기에는 서버의 공개 키와 CA의 서명이 포함되며, 개인 키는 일반적으로 서버 소유자가 보유합니다. 공개 키와 개인 키는 함께 작동하여 데이터 전송의 보안과 무결성을 보장합니다.

SSL 인증서

공개 키, 개인 키, CA 인증서의 개념을 이해한 후, 다음 단계는 이러한 개념이 실제 통신에서 어떻게 적용되는지 탐구하는 것입니다. SSL 인증서는 통신 암호화에 사용되므로, 이러한 인증서를 올바르게 배포하여 통신 보안과 데이터 기밀성을 보장하는 방법을 이해하는 것이 중요합니다.

API 게이트웨이에 인증서를 배포하는 방법

SSL 인증서의 핵심 개념을 이해한 후, 이를 배포하는 방법에 대해 논의해 보겠습니다. 실제로 인증서는 일반적으로 게이트웨이에 배포됩니다. 게이트웨이는 모든 클라이언트 요청의 진입점 역할을 하며, 네트워크 간 데이터의 수신, 분배, 처리, 필터링 및 암호화에서 중요한 역할을 합니다.

관리 측면에서, 게이트웨이에 인증서를 배포하면 인증서 관리 프로세스가 크게 단순화됩니다. 모든 암호화된 통신이 게이트웨이를 통해 이루어지기 때문에, 암호화된 전송이 필요한 각 서버에 개별적으로 SSL 인증서를 구성하고 관리할 필요가 없습니다.

예를 들어, 오픈소스 게이트웨이 Apache APISIX에서 SSL 인증서를 배포하는 과정은 크게 두 단계로 나뉩니다:

  1. SSL 인증서 준비: CA에서 SSL 인증서를 구매하거나 자체 서명된 인증서를 생성(테스트 환경에서만 사용)하고, 인증서 파일(.crt 또는 .pem 형식)과 개인 키 파일(.key 형식)을 얻습니다.

  2. Admin API를 통해 인증서 리소스 추가: APISIX는 Admin API를 제공하여 SSL 리소스를 동적으로 생성, 업데이트, 삭제할 수 있습니다. HTTP PUT 요청을 사용하여 인증서, 키, 선택적 SNI(Server Name Indication) 목록을 지정하여 SSL 리소스를 구성할 수 있습니다.

test.com 도메인에 대한 SSL 리소스를 구성하려면 다음과 유사한 명령을 사용할 수 있습니다:

curl http://127.0.0.1:9180/apisix/admin/ssls/1 \  
-H 'X-API-KEY: your-api-key' -X PUT -d'  
{  
    "cert" : "'"$(cat t/certs/apisix.crt)"'",
     "key": "'"$(cat t/certs/apisix.key)"'",
     "snis": ["*.test.com"]
}'

NGINX를 사용하는 경우, SSL 인증서 설정 후 구성을 다시 로드해야 합니다. 그러나 APISIX는 핫 리로드를 지원하므로, SSL 리소스를 추가한 후 즉시 인증서 구성이 적용됩니다.

SSL 인증서의 작동 흐름

SSL 인증서가 구성되면, 클라이언트가 HTTPS를 통해 test.com 또는 그 하위 도메인(예: www.test.com, SNI 목록 *.test.com에 지정됨)에 연결하려고 할 때, APISIX는 제공된 인증서와 키를 사용하여 보안 연결을 설정합니다. 일반적인 작동 흐름은 다음과 같습니다:

  1. 핸드셰이크 단계: APISIX 서버가 HTTPS 포트(기본값: 9443)에서 요청을 받으면 SSL 핸드셰이크 프로세스를 시작합니다. 이 과정에서 APISIX는 미리 구성된 SSL 인증서를 클라이언트에게 전송합니다. 인증서에는 서버의 공개 키와 CA에 대한 정보가 포함됩니다. 클라이언트는 인증서를 검증하여 신뢰할 수 있는 CA가 발급했는지, 유효 기간 내에 있는지, 요청된 도메인과 일치하는지 확인합니다. 검증이 통과되면, 클라이언트는 Pre-Master Secret으로 사용할 난수를 생성하고, 이를 서버의 공개 키로 암호화하여 서버에 전송합니다.

  2. 키 교환: APISIX는 SSL 리소스의 개인 키를 사용하여 Pre-Master Secret을 복호화하고, 이를 얻습니다. 클라이언트와 서버는 이 Pre-Master Secret과 다른 매개변수(예: 난수 및 프로토콜 버전)를 사용하여 공유 세션 키를 계산하며, 이 키는 이후 암호화 및 복호화에 사용됩니다.

  3. 데이터 전송: 키 교환 후, 클라이언트와 APISIX 서버 간에 안전한 암호화 채널이 설정됩니다. 클라이언트는 세션 키를 사용하여 데이터를 암호화한 후 APISIX 서버에 전송하며, APISIX는 동일한 세션 키를 사용하여 데이터를 복호화하여 원본 데이터를 얻습니다. 마찬가지로, APISIX는 데이터를 암호화한 후 클라이언트에게 다시 전송합니다.

  4. 요청 처리 및 응답 반환: APISIX는 수신된 요청(이제 복호화됨)을 구성된 라우트에 따라 처리합니다. 응답을 반환하기 전에, APISIX는 세션 키를 사용하여 응답 데이터를 암호화하여 안전한 전송을 보장합니다.

  5. 연결 종료: 통신이 완료되면, 클라이언트와 APISIX 서버는 SSL 연결을 안전하게 종료하고 관련 리소스를 해제합니다.

SSL 인증서 관리의 주요 포인트

SSL 인증서는 클라이언트와 서버 간의 안전하고 암호화된 통신을 보장합니다. 그러나 SSL 인증서만으로는 장기적인 통신 보안을 보장할 수 없으며, SSL 인증서 관리의 중요성을 이해하는 것도 중요합니다. 효과적인 인증서 관리는 인증서의 지속적인 유효성과 보안을 보장하여, 만료된 인증서나 관리不善으로 인한 보안 위험을 방지합니다.

게이트웨이에서 SSL 인증서를 관리할 때 다음 주요 포인트를 주의해야 합니다:

  1. SSL 인증서는 고정된 유효 기간을 가집니다. 만료되면 브라우저에서 사이트 접근 시 경고가 표시되며, 이는 사용자 경험과 웹사이트 신뢰도에 부정적인 영향을 미칩니다. 관리자는 정기적으로 인증서 유효성을 확인하고 만료 전에 인증서를 갱신할 수 있도록 미리 알림을 설정해야 합니다.

  2. 비즈니스 규모가 커짐에 따라, 수동으로 SSL 인증서를 관리하는 것은 점점 더 비현실적이 됩니다. 인적 오류를 최소화하고 시간을 절약하기 위해, 자동화 도구(예: ACME 클라이언트, Certbot)를 사용하여 인증서를 자동으로 신청, 배포, 업데이트, 폐기하는 것이 좋습니다.

  3. SSL 인증서 상태와 성능을 중앙에서 모니터링하여 잠재적인 문제를 신속하게 감지하고 해결합니다. 인증서가 만료되려고 하거나 이상이 있거나 보안 취약점이 있는 경우 관리자에게 즉시 알릴 수 있는 효과적인 경고 전략을 설정합니다.

결론

요약하자면, SSL 인증서는 네트워크 통신의 보안을 보장하는 데 필수적인 역할을 합니다. SSL 인증서의 원리와 관리를 이해하고 이를 게이트웨이에 효과적으로 배포함으로써, 데이터 전송의 보안과 무결성을 크게 향상시킬 수 있습니다. 이는 민감한 정보의 유출이나 변조를 방지할 뿐만 아니라, 사용자 경험과 웹사이트 신뢰도를 향상시킵니다.

Share article link