개요
인터넷의 보급과 네트워크의 장비가 발달함에 따라 발생하는 트래픽의 복잡성이 다양해지면서, 이에 따라 개인정보 유출, 사생활 침해, 계정 도용 등 네트워크 보안에 대한 문제가 대두되었다. 이러한 보안문제를 해결하기 위해서 다양한 보안프로토콜이 개발되었으며, 대표적으로 SSL/TLS, SSH, IPSec 등이 있다.
네트워크 보안 프로토콜은 데이터가 네트워크를 통해 전송될 때 기밀성, 무결성, 인증, 가용성 등을 보장하기 위해 나온 규약이다.
즉 네트워크 통신을 안전하게 만드는 " 규칙과 절차" 이다.
TCP/IP 프로토콜
보안 프로토콜을 보기 앞서 TCP/IP 프로토콜의 계층의 네트워크 계층, 전송 계층, 응용 계층 등 다양한 레이어에서 동작하기 때문에, TCP/IP 프로토콜 스택에서 보안 기능의 위치와 기능을 알 필요가 있다.
1. 네트워크 계층
네트워크 계층은 데이터가 목적지까지 전달되도록 경로를 결정하고, IP 주소 체계를 관리하는 계층이다. 주로 IP 프로토코이 동작하며, 네트워크 계층에서는 데이터가 스니핑이나 변조될 위험이 존재한다.
해당 계층에서는 IPSec 프로토콜을 사용하게 되는데 자세한 내용은 아래에서 설명한다.
| HTTP | FTP | SMTP |
| TCP | ||
| IP/IPSec | ||
2. 전송계층
전송 계층은 종단 간 (end - to - end) 통신의 신뢰성을 보장하거나, 빠른 전송을 위해 연결 없는 통신을 제공하는데 대표적으로 TCP와 UDP 프로토콜을 사용하게 된다. 전송 계층은 기본적으로 암호화가 되어 있지 않기 때문에 TCP 위에 보안을 구현하는 것으로 SSL or TLS을 사용하는 것으로 암호화와 무결성, 인증을 제공한다.
| HTTP | FTP | SMTP |
| SSL or TLS | ||
| TCP | ||
| IP | ||
3. 응용계층
응용 계층은 사용자와 직접 상호작용을 통해서 웹, 이메일, 파일전송, 원격 접속 등 다양한 서비스를 제공하는 계층이다. 사용자 데이터와 인증 정보가 이 계층에서 처리되며, HTTPS, SSH, Kerberos 등 보안 프로토콜이 적용되며, 주어진 응용프로그램의 요구사항에 맞게 보안 서비스를 사용한다.
| S/MIME | ||
| Kerberos | SMTP | HTTP |
| UDP | TCP | |
| IP | ||
SSL / TLS 프로토콜
SSL/TLS (Secure Sockets Layer / Transport Layer Secuirty)는 인터넷상에서 통신을 할 때 응용계층에서 생성된 데이터에 대하여 보안과 압축을 제공하기 위해 설계된 보안 프로토콜이다.

SSL 보안 서비스
SSL는 인터넷상에서 서버와 클라이언트 간 안전한 통신을 할 수 있도록 제공하는 것이다.
인터넷 채널 상에 서버와 클라이언트가 암호화 통신을 할 수 있도록 제공해 주는 역할을 하며, 암호화 통신을 하기 위해서는 서버와 클라이언트 간 동일한 대칭키를 공유를 하고 있어야 한다. 또한 안전하게 대칭키를 공유하기 위해서는 상호 간의 인증을 통해서 신원을 확인하는 절차가 필요하다.
SSL은 클라이언트와 서버 간에 핸드셰이크를 통해 인증이 이루어지며, 데이터 무결성을 위해 데이터에 디지털 서명을 하여 데이터가 의도적으로 도착하기 전에 해당 데이터가 조작되었는지 여부를 확인한다.
[ SSL 제공 보안 서비스 ]
| 보안 서비스 | 내 용 |
| 기밀성 (Confidentiality) |
대칭키 암호화를 통해 기밀성을 제공 |
| 메시지 무결성 (Message integrity) |
메시지 인증코드 [ MAC : Message Authentication Code]를 사용하여 전송되는 데이터의 위·변조를 탐지할 수 있는 무결성 서비스를 제공한다. |
| 인증 (Authentication) |
인증서 확인 과정을 통해 클라이언트와 서버간의 인증기능을 제공 한다. |
SSL 프로토콜 구조
SSL 프로토콜은 2개의 계층으로 구성되어 있다.
각 계층은 여러 요소들로 구성되어 있으며, 상위 계층에 있는 구성요소들은 SSL 메시지를 생성하는 역할을 하고, 하위 계층인 Record 계층으 상위 계층에서 생성된 메시지를 받아서 TCP 형식과 프레임에 맞게 구성한 뒤 TCP 계층으로 전달하는 역할을 한다.

SSL / TLS Hand - Shake
SSL / TLS 핸드셰이크는 클라이언트와 서버 간의 메시지 교환할 때 동작하게 된다. HTTPS 웹에 처음 연결이 될 때 진행하게 되며,
핸드셰이크의 단계는 클라이언트와 서버에서 지원하는 암호화 알고리즘, 키 교환 알고리즘에 따라 조금씩 차이가 난다.
1. Client Hello
클라이언트 → 서버로 메시지를 전송하게 되며, 핸드셰이크의 시작이다. 클라이언트가 서버 측으로 연결하기 위해서 TLS 버전, 암호화 알고리즘 무작위 Byte 문자열을 전송하게 된다.
2. Server Hello
서버 → 클라이언트로 메시지를 전송하게 되며, 클라이언트로부터 받은 메시지를 받고 응답 메시지를 보내는 단계이다. 서버의 SSL인증서, 암호화 알고리즘, 서버에서 생성한 무작위 Byte 문자열을 포함하여 메시지를 전송하게 된다.
3. 서버 인증서 확인
클라이언트가 서버로부터 응답받은 SSL 인증서를 인증 발행 기관에게 검증하는 역할을 한다. 해당 SSL 인증서가 CA가 만든 것인지 확인하는 작업을 하는 단계이다. 등록된 CA가 아니거나 거짓된 인증서라면 해당 단계에서 클라이언트 측에게 경고를 보내게 된다.
4. Premaster Secret
클라이언트가 랜덤 한 premaster secret을 생성하고, 해당 premaster secret를 서버의 공개키로 암호화하여 서버로 전송하게 된다.
5. Premaster Secret 복호화
서버 측은 자신의 개인키로 premaster secret를 복호화한다. 그리고 복호화 한 값을 master secret 생성하여 저장한다.
또한 Session key를 생성하여 브라우저와 서버에 주고받는 데이터를 암호화 및 복호화 작업을 진행한다. 해당 Session 키는 클라이언트 쪽으로 전송하게 된다.
6. SSL HandShake 종료 및 HTTPS 통신
브라우저와 서버는 SSL HandShake를 정상적으로 완료되었으면, 동작과정을 종료하고 HTTPS 통신을 시작하게 된다.