ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [AWS] ACM(SSL/TLS 인증서 발급)
    Software engineer/Infra 2023. 6. 12. 20:47

     

    AWS에서는 SSL/TLS 인증서 관리 서비스인 AWS Certificate Manager 서비스를 제공합니다. 해당 서비스를 이용하는 방법은 이미 많은 분들이 제공하기에 SSL/TLS 인증서가 무엇인지 한번 알아보겠습니다.

     

     

     

     

    SSL/TLS

    SSL 및 TLS는 웹과 애플리케이션 간의 통신을 암호화하고 보호하기 위한 프로토콜입니다. 이는 인터넷에서 정보의 안전한 전송을 제공하기 위해 사용됩니다.

    SSL과 TLS는 다음과 같은 주요 기능을 제공합니다:

    1. 암호화

    SSL/TLS는 통신하는 데이터를 암호화하여 제삼자가 데이터를 엿볼 수 없도록 합니다. 데이터는 송신자와 수신자 간에 암호화된 형태로 전송되므로 중간에서 가로채더라도 읽을 수 없습니다.

    2. 신원 확인

    SSL/TLS는 서버의 신원을 확인하여 클라이언트가 서버와 안전한 연결을 수립할 수 있는지 확인합니다. 이를 통해 클라이언트는 신뢰할 수 있는 서버와 통신할 수 있습니다.

    3. 무결성 검증

    SSL/TLS는 데이터의 무결성을 보장하기 위해 사용됩니다. 데이터가 전송 중에 변경되지 않았는지 확인하여 데이터 변조를 방지합니다.

    SSL은 원래 넷스케이프에서 개발되었으며, TLS는 SSL의 후속 버전으로 IETF(Internet Engineering Task Force)에서 표준화되었습니다. 일반적으로 우리는 SSL과 TLS를 혼용하여 사용하며, 대부분의 웹 사이트와 애플리케이션은 TLS를 사용하여 암호화 및 보안을 제공합니다.
    웹 브라우저와 웹 서버 간의 통신에서 SSL/TLS는 HTTPS로 알려진 프로토콜을 사용합니다. HTTPS는 일반 HTTP의 보안 버전으로, 사용자의 개인 정보를 보호하고 데이터를 안전하게 전송하기 위해 SSL/TLS를 사용합니다.
    SSL/TLS는 온라인 상에서 데이터 보안과 개인 정보 보호를 강화하기 위한 핵심 도구입니다. 인터넷 뱅킹, 전자상거래, 웹 사이트 로그인 등에서 많이 사용되며, 사용자의 데이터를 보호하고 통신의 안전성을 확보하는 데 중요한 역할을 합니다.

     

     

     

    SSL/TLS가 클라이언트와 서버 간 통신에서 어떻게 사용되는지 전체 통신과정을 통해 알아보겠습니다.

     
     

     

    클라이언트와 서버간 통신 과정

    우리는 너무 당연하게 인터넷을 통해 원하는 웹 서비스를 이용합니다. 이런 수많은 웹 서비스를 접속하는 과정은 어떨까요?

     

     

    DNS(Domain Name System)

    인터넷에서 도메인 이름과 IP 주소 간의 매핑을 관리하는 분산 데이터베이스 시스템입니다. DNS는 사용자가 읽기 쉬운 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환하여 통신을 가능하게 합니다.

     

     

    3-way handshake

    TCP(Transmission Control Protocol)의 연결 설정을 위한 과정입니다. TCP는 신뢰성 있는 데이터 전송을 제공하기 위해 사용되는 프로토콜로, 3-way handshake는 클라이언트와 서버 간의 연결을 확립하기 위해 사용됩니다. 3-way handshake는 다음과 같은 단계로 이루어집니다.


    1. 클라이언트에서 서버로 SYN 전송

    클라이언트는 서버에 연결 요청을 보내기 위해 SYN(동기화) 패킷을 보냅니다. SYN 패킷은 클라이언트가 서버와의 연결을 시작하려는 의도를 나타냅니다. SYN 패킷에는 초기 순서 번호(ISN)가 포함되어 있습니다.

    2. 서버에서 클라이언트로 SYN-ACK 전송

    서버는 클라이언트의 SYN 패킷을 받으면, 연결 요청을 수락하고 클라이언트에게 응답하기 위해 SYN-ACK(동기화-응답) 패킷을 전송합니다. SYN-ACK 패킷에는 서버의 초기 순서 번호와 클라이언트의 ISN에 1을 더한 값이 포함됩니다.

    3. 클라이언트에서 서버로 ACK 전송

    클라이언트는 서버로부터 받은 SYN-ACK 패킷에 대한 응답으로 ACK(응답) 패킷을 전송합니다. 이 패킷은 서버의 초기 순서 번호와 클라이언트의 ISN에 1을 더한 값을 포함하며, 이로써 클라이언트와 서버 간의 연결이 성공적으로 확립됩니다.

    3-way handshake가 완료되면 클라이언트와 서버는 신뢰적인 연결을 맺고 데이터를 안전하게 전송할 수 있습니다. 이 과정은 TCP의 연결 지향성과 신뢰성을 제공하는 핵심 요소입니다.

     

     

    SSL/TLS handshake

    SSL/TLS handshake는 SSL(Secure Sockets Layer) 또는 TLS(Transport Layer Security) 프로토콜을 사용하여 클라이언트와 서버 간에 보안 연결을 설정하기 위한 과정입니다. SSL/TLS 핸드셰이크는 다음과 같은 단계로 이루어집니다.


    1. 클라이언트 Hello

    클라이언트는 서버에 SSL/TLS 연결을 요청하기 위해 클라이언트 Hello 메시지를 보냅니다. 이 메시지에는 클라이언트의 지원 암호화 알고리즘, 프로토콜 버전, 랜덤 한 데이터 등이 포함됩니다.

    2. 서버 Hello

    서버는 클라이언트 Hello 메시지를 받고, 서버의 인증서와 선택된 암호화 알고리즘, 프로토콜 버전 등의 정보를 클라이언트에게 보냅니다. 서버는 서버 랜덤 데이터를 생성하여 포함시킵니다.

    3. 인증서 검증

    클라이언트는 서버에서 받은 인증서를 검증합니다. 이를 위해 클라이언트는 인증서의 유효성을 확인하고, 인증서에 서명한 인증 기관(CA)의 신뢰할 수 있는 루트 인증서 목록과 비교합니다. 또한, 인증서의 도메인 이름과 서버에 접속한 도메인 이름이 일치하는지 확인합니다.

    4. 세션 키 교환

    클라이언트는 클라이언트 랜덤, 서버 랜덤, 사전 정의된 암호화 알고리즘 등을 사용하여 프리 마스터 시크릿을 생성합니다. 이 프리 마스터 시크릿을 서버의 공개 키로 암호화하여 서버로 전송합니다.

    5. 세션 키 생성

    서버는 클라이언트로부터 받은 프리 마스터 시크릿을 서버의 비밀 키로 복호화하고, 클라이언트 랜덤과 서버 랜덤을 사용하여 마스터 시크릿을 생성합니다. 이 마스터 시크릿은 클라이언트와 서버 간의 세션 키를 생성하는 데 사용됩니다.

    6. 보안된 통신

    SSL/TLS 핸드셰이크가 완료되면, 클라이언트와 서버는 이제 보안된 통신을 수행합니다. 클라이언트가 서버로 데이터를 보낼 때는 세션 키를 사용하여 데이터를 암호화하고, 서버가 클라이언트로 응답을 보낼 때는 동일한 세션 키를 사용하여 데이터를 암호화합니다.

    SSL/TLS 핸드셰이크는 클라이언트와 서버 간의 보안 연결을 설정하고, 인증서 검증 및 암호화 키 교환을 수행하여 데이터의 기밀성과 무결성을 보장합니다. 이를 통해 클라이언트와 서버 간의 안전한 통신이 가능해집니다.

     

     

     

    따라서 사용자들이 웹 브라우저에 google.com에 접속을 요청하면 DNS를 통해 IP를 확인하고 해당 IP에 접속을 하기위해 3-way handshake과정을 통해 데이터를 송수신받을 준비를 합니다. 또한 데이터를 송수신하는 데 있어서 데이터의 안정성을 높이기 위해 SSL/TLS 인증서를 취득하는 과정의 handshake 과정을 진행하면서 서버의 인증서를 취득합니다. 이후 클라이언트와 서버는 안정적으로 암호화된 데이터를 주고받을 수 있게 됩니다.

     

     

     

    4-way handshake

    TCP 연결의 종료 과정을 나타냅니다. 4-way handshake는 클라이언트와 서버 간의 연결을 안전하게 종료하기 위해 사용됩니다. TCP 연결을 종료할 때 4-way handshake는 다음과 같은 단계로 이루어집니다.

    1. 클라이언트에서 서버로 FIN 전송

    클라이언트는 서버에게 연결 종료를 요청하기 위해 FIN(Finish) 패킷을 보냅니다. 이 패킷은 클라이언트가 더 이상 데이터를 전송하지 않을 것임을 나타냅니다.

    2. 서버에서 클라이언트로 ACK 전송

    서버는 클라이언트의 FIN 패킷을 받으면, 확인 응답(ACK) 패킷을 클라이언트로 전송합니다. 이로써 서버는 클라이언트의 연결 종료 요청을 수락합니다.

    3. 서버에서 클라이언트로 FIN 전송

    서버는 더 이상 데이터를 전송하지 않을 것임을 나타내기 위해 자신도 FIN 패킷을 클라이언트로 전송합니다.

    4. 클라이언트에서 서버로 ACK 전송

    클라이언트는 서버의 FIN 패킷을 받으면 확인 응답(ACK) 패킷을 서버로 전송하여 종료 과정을 완료합니다. 이로써 클라이언트와 서버의 연결이 완전히 종료됩니다.

    4-way handshake를 통해 클라이언트와 서버는 상호간의 연결 종료를 완료하고, 사용 중인 리소스를 해제합니다. 이를 통해 정상적으로 연결을 종료하고 데이터 전송의 완전성을 보장할 수 있습니다.

     

     

     

     

    AWS Certification Manager

    AWS에서 제공하는 관리형 인증서 발급 및 관리 서비스입니다. ACM을 사용하면 손쉽게 SSL/TLS 인증서를 생성, 관리 및 적용할 수 있습니다. 다음은 ACM의 주요 특징과 기능에 대한 설명입니다.

    1. 무료 SSL/TLS 인증서

    ACM은 AWS 리소스에 사용할 수 있는 무료 SSL/TLS 인증서를 제공합니다. 이를 통해 HTTPS를 통한 웹 사이트 액세스 또는 애플리케이션 통신의 보안 강화가 가능합니다.

    2. 통합된 관리

    ACM은 SSL/TLS 인증서의 생성, 발급, 갱신, 재발급, 폐지 등을 통합적으로 관리합니다. 이를 통해 복잡한 인증서 관리 작업을 간소화하고, 인증서의 유효 기간을 관리하여 보안과 신뢰성을 유지할 수 있습니다.

    3. 자동 갱신

    ACM은 인증서의 자동 갱신을 지원합니다. 인증서의 유효 기간이 다가오면 ACM은 자동으로 인증서를 갱신하여 중단 없이 계속 사용할 수 있도록 합니다.

    4. 통합 서비스 지원

    ACM은 AWS의 다양한 서비스와 통합하여 사용할 수 있습니다. 예를 들어, Elastic Load Balancer(ELB), Amazon CloudFront, Amazon API Gateway 등과 함께 사용하여 SSL/TLS 인증서를 적용할 수 있습니다.

    5. 비밀 관리 및 액세스 제어

    ACM은 AWS의 기본 보안 및 비밀 관리 서비스와 통합됩니다. AWS Identity and Access Management(IAM)을 사용하여 인증서에 대한 액세스 제어를 구성하고, AWS Key Management Service(KMS)를 사용하여 인증서의 개인 키를 안전하게 관리할 수 있습니다.

    ACM은 개발자와 시스템 관리자들에게 SSL/TLS 인증서 관리를 간소화하고, 보안과 신뢰성을 강화하는 데 도움을 줍니다. AWS의 다른 서비스와의 통합성과 자동 갱신 기능을 통해 운영 부담을 줄이고, 안전하고 신뢰할 수 있는 애플리케이션과 웹 사이트를 구축할 수 있습니다.

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     


     
     
     
     
     
     

Designed by Tistory.