워드프레스를 설치하고 웹사이트를 운영하다 보면 한 번 이상은 꼭 마주치게 되는 SSL/TLS 프로토콜, 바로 암호화 기반의 인터넷 보안 프로토콜입니다. SSL/TLS 프로토콜이 어떤 역할을 하는지, 그리고 암호화 통신이란 무엇인지 간단히 알아보겠습니다.
OSI 모델 – 네트워크 프로토콜 7계층
프로토콜이란 데이터 통신을 위해 표준화된 규약을 뜻하며 서로 다른 환경의 컴퓨터간에도 원활한 통신을 가능하게 해줍니다. 각각의 프로토콜은 주로 세부적인 기능들을 갖고 있기 때문에 여러 프로토콜을 조합하여 ‘네트워크 아키텍처’를 구성하는 것이 일반적입니다. 그 중 범용 네트워크 아키텍처로 알려져 있는 ‘개방형 시스템 상호 연결(OSI: The Open Systems Interconnection)’은 국제표준화기구에서 만든 통신 표준으로 통신 시스템을 아래와 같이 7개의 추상적 계층으로 구성한 모델입니다.

- 7. 응용 프로그램 계층 Application Layer: 응용 프로그램을 통해 사용자와 직접 통신하는 유일한 계층입니다. 사용자는 주로 웹 브라우저나 이메일 클라이언트를 통해 네트워크에 진입하여 데이터를 제공하게 됩니다. (주요 프로토콜: HTTP, FTP, SMTP, SSH, Telnet 등)
- 6. 프레젠테이션 계층 Presentation Layer: 데이터 번역을 담당하는 계층으로, 응용 프로그램에서 넘겨받은 데이터를 암호화(인코딩/디코딩) 하는 작업, 다음 계층으로 넘겨줄 때 용량을 줄이는 압축 작업, 넘겨받은 데이터를 응용 프로그램이 처리 가능한 구문으로 변환하는 작업 등이 이루어집니다. (주요 프로토콜: ASCII, SSL, JPEG, MPEG 등)
- 5. 세션 계층 Session Layer: 통신의 시작과 종료 즉, 세션의 연결과 해제를 제어하는 계층입니다. 아울러, 데이터 전송시 체크포인트(동기점)를 설정함으로써 동기화 및 오류 복구를 수월하게 해줍니다. (주요 프로토콜: RPC, NetBIOS, Wock 등)
- 4. 전송 계층 Transport Layer: 두 장치간의 통신을 담당하는 계층으로, 데이터를 네트워크 계층에서 처리할 수 있는 세그먼트 단위로 분할하는 작업, 그리고 다시 조립하여 세션 계층으로 넘겨주는 작업, 전송 속도 및 오류 제어 등이 이루어집니다. (주요 프로토콜: TCP, UDP 등)
- 3. 네트워크 계층 Network Layer: 두 네트워크 간의 통신을 담당하는 계층으로, 송신자 장치에서 세그먼트를 패킷 단위로 분할하는 작업, 그리고 수신자 장치에서 이를 다시 조립하는 작업, 라우팅(데이터가 목적지에 도달하기 위한 최상의 물리적 경로를 찾는 것) 등이 이루어집니다. 두 장치가 동일 네트워크에 있는 경우에는 네트워크 계층이 필요 없게 됩니다. (주요 프로토콜: IP, ICMP, IGMP 등)
- 2. 데이터 연결 계층 Data Link Layer: 동일 네트워크 내 네트워크 장비들 간의 통신을 설정하는 계층으로, 네트워크 계층에서 받아온 패킷에 이더넷 헤더(출발지와 목적지의 물리 주소인 MAC 주소 정보)와 트레일러(오류 확인용 체크섬)를 붙여 프레임 단위로 만듭니다. (주요 프로토콜: Ethernet, HDLC, PPP 등)
- 1. 물리적 계층 Physical Layer: 랜선, 동축 케이블, 광케이블, 허브, 리피터 등 물리적(전선)으로 연결된 장비들간의 통신과 관련된 계층으로, 캡슐화가 완료된 데이터들이 여기서 전기적 신호 즉, 1과 0의 문자열인 비트(bit) 스트림으로 변환되어 전송됩니다. (주요 프로토콜: RS-232, X.25/X.21 등)
SSL/TLS 프로토콜은 무엇인가
SSL(보안 소켓 계층: Secure Socket Layers)과 TLS(전송 계층 보안: Transport Layer Security)는 인터넷에서 두 당사자 간의 통신을 보호하고 인증하는 암호화 프로토콜 즉, 암호화 보안 통신을 가능하게 하기 위해 표준화된 규약입니다. TLS가 SSL의 보안 업그레이드 버전으로 사실상 SSL은 더 이상 사용되지 않지만, SSL이라는 용어 자체가 워낙 보안 프로토콜을 대표하다 보니 현재 사용중인 TLS까지도 그냥 SSL로 부르는 경우가 많습니다. SSL/TLS 프로토콜은 암호화 및 암호 해독 시 공개 키와 개인 키를 사용하는 ‘비대칭 암호화’ 방식을 채택하고 있습니다.
사용자가 회원제 인터넷 쇼핑몰에서 상품을 주문한다고 할 때, 특별한 장치가 없다면 사용자가 제공하는 모든 정보들, 이를테면 사용자 로그인 정보, 개인 정보, 결제 정보 등이 그대로 인터넷을 통해 흘러다니게 됩니다. 즉, 이런 민감한 정보들이 무방비로 노출된 채 데이터 피싱, 명의 도용, 데이터 변조 등 악의적인 행위의 대상이 될 수 있다는 것입니다. 이러한 문제를 해결하기 위해 SSL/TLS 프로토콜은 기본적으로 사용자와 웹서버 간에 오가는 모든 데이터를 암호화함으로써 중간에 누군가 이를 가로채더라도 정보를 알아보거나 사용할 수 없게 해주며, 악성 공격 차단이나 웹서버 인증 기능을 통해 이왕이면 침입 자체를 차단하고자 노력합니다. 그리고 전송 중인 데이터가 중간에 변조되는 것을 방지하는 역할까지 해주고 있어, SSL/TLS 프로토콜은 오늘날 인터넷 사용에 없어서는 안될 필수 보안 요소인 것입니다.
SSL/TLS 프로토콜은 OSI 7계층 모델의 어느 한 계층에 속하는 것이 아니라, 응용 프로그램 계층(7계층)과 전송 계층(4계층) 사이에 고유의 독립적인 프로토콜 계층을 만들어서 작동하며, 응용 프로그램 계층의 프로토콜들은 인터넷으로 보낼 데이터를 TCP 대신 SSL로 보내고, SSL은 받은 데이터를 암호화한 후 TCP로 보내서 인터넷으로 전달하게 됩니다. 인터넷으로부터 데이터를 받을 때 역시, TCP로부터 받은 데이터를 SSL이 암호를 풀어 응용 프로그램 계층에 전달하게 되는데, 이 과정에서 응용 프로그램은은 SSL을 TCP로 인식하고 TCP는 SSL을 응용 프로그램으로 인식하기 때문에, 응용 프로그램과 TCP사이의 데이터 전달 방식 자체는 기존과 동일하다고 볼 수 있습니다.
SSL/TLS 프로토콜의 기본 원칙은 아래와 같습니다.
- 암호화: 전송되는 모든 데이터는 암호화되어 어떠한 공격으로부터도 안전해야 합니다.
- 인증: SSL/TLS는 데이터 암호화 외에도 원본과 대상을 인증할 수 있어야 합니다. 데이터 송수신이 이루어지는 서버가 합법적인 곳인지 검증함으로써 피싱이나 MITM(Man-In-The-Middle) 등의 공격을 최대한 차단해야 합니다.
- 데이터 무결성: 데이터가 손실이나 변조 없이 원본 그대로 전송되었음을 보장해야 합니다.
SSL/TLS 프로토콜 작동 방식: 핸드셰이크
SSL/TLS 프로토콜은 소위 ‘핸드셰이크 Handshake’라 불리는 방식을 사용합니다. Handshake라는 단어의 뜻처럼, 사용자 클라이언트와 웹서버 양측이 악수하면서 일련의 협상을 하는 단계라고 생각하시면 됩니다. 이 과정에서는 서로를 신뢰할 수 있는지 확인하고, 암호화 방법에 동의하고, 실제 데이터 전송이 이루어질 보안 채널을 설정하는 등의 작업이 이루어집니다. 두 당사자는 공개 키를 교환하여 보안 설정을 하고, 그 과정에서 통신할 때 사용할 세션 키를 생성합니다. 상세 과정을 한 번 살펴보겠습니다.
- ClientHello 패킷: 사용자 클라이언트(주로, 웹 브라우저)가 서버에 신원 확인을 요청합니다.
- ServerHello 패킷: 서버는 SSL/TLS 인증서와 서버 공개 키(Server Public Key) 복사본을 응답으로 전송합니다.
- Server Certificate 패킷: 사용자 클라이언트가 공개되어 있는 인증기관(CA: Certificate Authority) 공개 키(CA Public Key)를 이용하여 SSL/TLS 인증서의 유효성을 확인하고, 웹사이트 도메인과 일치하는지 확인하여 웹사이트가 안전함을 인증합니다.
- Server Hello Done 패킷: 서버가 전송할 것을 모두 전송했으므로, 이제 사용자 클라이언트는 실제 데이터를 암호화하는데 사용할 세션 키(Session Key)를 생성하고, 서버가 보내준 서버 공개 키로 이를 암호화하여 다시 서버로 전송합니다.
- Change Cipher Spec 패킷: 서버가 수신된 세션 키를 개인 키로 해독하여 클라이언트와 동일한 세션 키를 확보하였음을 알립니다.
- Finished 패킷: 보안 세션 준비가 모두 완료되었음을 알리는 Finished 메세지를 교환하고 핸드셰이크를 종료합니다.
- 클라이언트와 서버 간에 암호화된 연결이 설정되었으며, 이제 해당 세션 내에서는 제공된 세션 키를 사용하여 안전한 환경에서 통신할 수 있습니다. 즉, 클라이언트와 서버가 모든 파일과 메시지를 세션 키로 암호화하여 공유하는 것입니다. 대칭 키 혹은 비밀 키로도 불리는 세션 키는 한 개의 통신 세션에서만 사용되는 대칭형 암호화 키로 해당 세션이 끝나면 폐기됩니다. 구구절절 많은 단계들이 있는 것처럼 보이지만, 실제 SSL/TLS 프로토콜의 핸드셰이크는 1초도 채 안걸리는 찰나의 프로세스이므로, 사용자 경험에는 전혀 영향을 주지 않습니다.
SSL/TLS 인증서란 무엇인가
SSL/TLS 인증서는 웹사이트가 위치하고 있는 서버에 설치되는 파일로, 다음과 같은 정보들을 포함하고 있습니다.
- 인증서 발급 도메인
- 인증서 발급 대상
- 인증 기관
- 인증 기관 디지털 서명
- 관련 하위 도메인
- 인증서 발행일
- 인증서 만료일
- 공개 키
- SSL/TLS 프로토콜 버전
해당 웹사이트에 접속하기 위한 사용자 클라이언트의 요청이 있을 때마다 서버는 이 인증서를 전송함으로써 클라이언트 측에 서버의 신원도 증명하고 보안 접속 설정에 사용할 공개 키도 전달하게 됩니다. 웹사이트 소유자 정보, 인증서 정보 및 공개 키 등 간단한 내용이 들어있는 파일이지만, 이 인증서가 없으면 웹사이트는 SSL/TLS 프로토콜 보안 접속을 사용할 수 없습니다.
SSL/TLS 인증서는 CA(Certificate Authority)라 불리는 인증 기관에서 웹사이트 도메인 및 소유자 정보를 확인한 후 발급받을 수 있습니다. CA는 루트 인증 기관(Root Certificate Authority)으로서 갖추어야 할 요건들을 충족하고 심사를 통해 정식으로 등록된 업체들입니다. 잘 알려진 CA로는 Symantec(VeriSign), GoDaddy, Sectigo(Comodo), GlobalSign, Digicert, Entrust, Certum 등이 있고, 인증서 발급에 요금을 청구하는 대부분의 인증 기관들과 달리 무료 SSL/TLS 인증서로 빠르게 인기를 얻고 있는 Let’s Encrypt가 있습니다. Amazon이나 Google은 CA 인증을 받아 아예 자체적으로 내부 전용 인증서 발급 센터를 운영하고 있습니다. 기술적으로는 CA가 아니어도 모든 웹사이트 소유자가 자신만의 SSL/TLS 인증서를 만들 수 있게 되어 있고, 이러한 인증서를 뜻하는 ‘자체 서명 인증서(Self-signed SSL/TLS Certificate)’라는 용어도 따로 있지만, 웹 브라우저는 자체 서명된 인증서를 신뢰하지 않기 때문에 주로 임시 방편이나 테스트 목적으로 사용됩니다.
인증 기관으로부터 SSL/TLS 인증서를 얻고 나면 이를 웹 서버에 설치해야 하는데, 호스팅을 받고 있다면 주로 호스팅사가 이 프로세스를 대행하고 인증 기관은 발행한 인증서의 사본을 보관합니다.
URL이 입력된 브라우저의 주소창을 보면 내가 현재 이용하고 있는 웹사이트에 SSL/TLS 프로토콜이 적용되어 있는지 여부를 확인할 수 있습니다. SSL/TLS 프로토콜이 설치된 웹사이트의 주소는 HTTP:// 대신 HTTPS://로 시작하며 주소 맨 앞에 잠겨진 자물쇠 표시가 있습니다. HTTPS는기존 HTTP(Hypertext Transfer Protocol)에 Secure의 S를 추가함으로써 사용자와 웹사이트의 통신이 암호화되어 안전하게 이루어짐을 의미합니다.

인터넷을 사용하다가 위와 같은 화면을 가끔 본 적이 있을 것입니다. SSL/TLS 프로토콜이 적용되어 있지 않은 즉, 유효한 SSL/TLS 인증서가 설치되어 있지 않은 웹사이트입니다. 이 웹사이트 접속은 비공개가 아니기 때문에 공격자들에 의해 당신의 정보를 도난당할 우려가 있고, 이 웹사이트 자체도 정상적인 웹사이트인지 신원 증명이 불가능하다는 뜻입니다. 물론 이러한 리스크에도 불구하고, 사용자의 선택에 따라 하단 링크를 클릭하면 웹사이트 접속 자체를 계속 진행할 수는 있습니다.
더 많은 웹사이트들이 안전한 HTTPS로 전환하도록 하기 위해, 구글 크롬 Chrome 브라우저를 시작으로 많은 웹 브라우저들이 HTTP 웹 사이트를 위와 같이 “안전하지 않음” 또는 “연결이 비공개로 설정되어 있지 않습니다” 등으로 표시하기 시작했습니다. 그리고, 실제로 사용자들도 이런 메세지가 표시되는 웹사이트들의 접속을 피하게 됩니다. 즉, HTTPS를 사용한다는 것은, 사용자의 안전 및 데이터 보안 유지 기능도 있지만 사용자와의 신뢰를 구축하는 데 있어서도 매우 중요하다고 할 수 있습니다.
여러분이 접속한 웹사이트의 주소가 HTTP://로 시작하고 주소 앞에 잠겨진 자물쇠 표시가 있다면 SSL/TLS 인증서가 설치되어 있다는 뜻이므로, 해당 웹사이트의 SSL/TLS 인증서를 조회해볼 수 있습니다.

주소 앞의 잠겨진 자물쇠를 클릭하고 사이트 정보 팝업에서 ‘Connection is secure’를 클릭, 다음 화면에서 ‘Show certificate’ 관련 아이콘 혹은 링크를 클릭하면 SSL/TLS 인증서가 뜹니다.

지금 보고 계신 이 블로그의 SSL/TLS 인증서를 조회해보았습니다. 발급 대상의 일반 이름(Common Name)에는 도메인 이름이 제대로 나오고 있고, 발급 조직은 R3, 발급 기관은 Let’s Encrypt입니다. 하단에서는 서버 공개 키도 확인할 수 있습니다.
반면, 사용자 클라이언트인 웹 브라우저는 과연 안전한지, SSL/TLS는 제대로 지원하고 있는지 궁금할 수 있습니다. How’s My SSL? (https://www.howsmyssl.com/) 웹사이트에 접속하면, 현재 사용중인 웹 브라우저의 SSL/TLS 버전 정보 및 기타 보안 요소들을 제대로 지키고 있는지 자동으로 스캔해줍니다.
