SSL(Secure Sockets Layer, 보안 소켓 계층)
향상된 TCP 버전을 흔히 SSL이라 한다. SSL은 TCP 연결에 보안 수단을 제공한다.
- 웹사이트와 브라우저 사이에 전송되는 모든 유형의 데이터를 암호화하여 인터넷 연결을 보호하기 위한 표준 기술이다.
- SSL은 TCP를 보호하므로 TCP상에서 일어나는 모든 데이터 송수신에 사용될 수 있다.
- 해커가 개인 데이터, 금융 데이터 등의 정보를 훔쳐 보거나 훔치는 것을 방지한다.
SSL 간단 사용 예시
- 민감한 정보를 다루는 브라우저와 서버와의 통신은 대부분
SSL
위에서 이뤄진다.
https
을 사용하는 URL이라면 브라우저가 SSL
을 사용하는 것이다. 즉, https
를 사용하는 웹사이트는 SSL 또는 TLS로 보호된다는 의미이다.
SSL의 필요성
예를 들어 닭가슴살을 판매하는 웹사이트에서 닭가슴살을 구입한다고 해보자.
- 닭가슴살 판매 웹사이트에서 상품 종류와 수량, 배달 주소, 지불 방식 등을 입력할 수 있는 양식을 띄워준다.
- 양식에 맞게 값들을 입력하고 주문을 완료한 다음, 닭가슴살이 배송되기를 기다린다.
위와 같은 일반적인 인터넷 상거래 시나리오에서 어떠한 보안 수단도 없다면 다음과 같은 상황이 발생할 수 있다.
- 기밀성(정보 은닉)이 제공되지 않는 경우
- 해커가 주문 내용을 가로채 주문 시 사용하는 카드 정보를 탈취할 수 있다.
- 해커는 카드 정보를 악의적인 목적으로 사용할 수 있다.
- 무결성(정보가 조작되거나 훼손되지 않음)이 없는 경우
- 해커가 주문 내용을 가로채서 수정할 수 있다.
- 해커는 주문 내용을 수정해 실제로 주문하지 않은 상품을 구매하게 할 수 있다.
- 서버 인증이 제공되지 않는 경우
- 닭가슴살 판매 웹사이트로 위장한 웹사이트가 존재할 수 있다.
- 해커는 주문 금액, 주문 시 사용한 여러 정보들을 탈취할 수 있다.
일반적인 닭가슴살 판매 웹사이트를 생각하면 피해가 크지 않다고 생각할 수도 있지만, 만약 이런 보안 수단을 제공하지 않는 금융 웹사이트가 있다면 그 피해는 상당히 커질 것이다.
SSL은 기밀성, 무결성, 서버 인증을 통해 TCP를 향상시켜 이런 문제들을 해결한다.
- 여기서 서버 인증이란 클라이언트가 접속한 서버가 신뢰할 수 있는 서버임을 보장하는 것을 말한다.
SSL 이해하기
1️⃣ 핸드셰이크
- 클라이언트와 서버가 TCP로 연결한다.
- 클라이언트는 TCP로 연결된 서버가 자신이 연결하려는 진짜 서버인지 확인한다.
- 클라이언트는 서버에 SSL 헬로 메시지를 보낸다.
- 서버는 서버의 공개키를 담은 SSL 인증서를 응답한다.
- 서버가 SSL 인증서를 응답하려면 신뢰할 수 있는 CA(인증기관)으로부터 서버를 검증 받고, 서버 정보와 서버의 공개키를 담고 있는 SSL 인증서를 먼저 발급받아야 한다.
- CA가 발급한 서버의 SSL 인증서는 CA의 비공개키로 암호화된다.
- 클라이언트는 SSL 세션에 필요한 대칭키들을 생성하기 위해 자신과 서버가 사용할
master secret key
를 서버에 전송한다.
- 클라이언트는 MS(Master Secret)을 생성하고, 서버의 공개키로 MS를 암호화하여 EMS(Encrypted Master Secret)을 생성한다.
- EMS를 서버에 전송하고, 서버는 비공개키를 사용해 EMS를 복호화하여 MS를 얻는다.
핸드셰이크 단계를 거쳐 클라이언트와 서버는 SSL 세션의 Master Secret을 공유하게 된다. 이후 Master Secret은 SSL 세션이 사용하는 대칭키인 세션키가 된다.
2️⃣ 키 유도
- 핸드셰이크 단계를 거쳐 클라이언트와 서버가 공유하는 MS는 이후 암호화와 데이터 무결성 검사를 위해 대칭키(세션키)로 사용된다.
- 일반적으로 클라이언트와 서버가 각자 다른 암호화 키를 사용하고, 암호화와 데이터 무결성 검사에서 서로 다른 키를 사용하는 것이 더 안전한 방식이다.
- 따라서 MS를 사용해 4개의 키를 새롭게 생성한다.
- 클라이언트가 서버에 보내는 데이터에 대한 세션 암호화 키
- 클라이언트가 서버에 보내는 데이터에 대한 세션 MAC 키
- 서버가 클라이언트에 보내는 데이터에 대한 세션 암호화 키
- 서버가 클라이언트에 보내는 데이터에 대한 세션 MAC 키
키 유도 단계를 거치면 클라이언트와 서버는 각각 4개의 키를 갖게 된다. 세션 암호화 키는 데이터를 암호화하기 위해, MAC 키는 데이터 무결성을 확인하기 위해 사용한다.
3️⃣ 데이터 전송
클라이언트와 서버는 MS를 사용해 생성한 4개의 키를 공유하고 있어서 TCP 연결을 통해 서로 안전하게 데이터를 주고 받을 수 있다.
HTTPS
HTTPS는 SSL 프로토콜 위에서 동작하는 프로토콜이다.
- HTTP는 일반 텍스트 프로토콜로 고안되어, 클라이언트와 서버 사이에 전송되는 데이터를 암호화하지 않아 보안 취약점이 존재한다.
- HTTPS는 클라이언트와 서버 사이에 전송되는 모든 유형의 데이터를 암호화한다.
- HTTPS를 사용하면 클라이언트와 서버가 민감한 정보를 서로 안전하게 주고 받을 수 있다.
HTTPS 동작 과정
HTTPS는 SSL을 사용해 세션 데이터를 암호화한다.
서버는 먼저 인증기관으로부터 인증서를 발급받고, 브라우저는 인증서를 복호화할 수 있도록 인증기관으로부터 인증기관의 공개키를 전달받는다.
- 서버는 공개키와 비공개키를 만들고, 인증기관(CA)에 자신의 정보와 공개키의 관리를 맡긴다.
- 인증기관은 서버가 관리를 맡긴 정보를 검증한다. 그리고 인증기관의 비공개키를 사용해 서버의 정보와 공개키를 암호화한
인증서
를 만들어 서버에 발급한다.
- 인증기관은 브라우저에 인증기관의 공개키를 제공한다. 인증기관의 공개키는 인증서를 복호화할 때 사용된다. 브라우저는 인증기관과 인증기관에 해당하는 공개키를 저장한다.
브라우저는 서버와 안전하게 통신하기 위해 아래 과정을 거친다.
- 사용자가 웹사이트에 접속하면 서버는 인증기관에서 발급받은 인증서를 브라우저에게 전달한다.
- 브라우저는 이전에 인증기관으로부터 제공받은 공개키를 사용해 서버로부터 전달받은 인증서를 복호화한다. 복호화 결과로 서버의 정보와 서버의 공개키를 알 수 있게 된다.
- 브라우저는 대칭키를 생성한다. 그리고 이전 과정에서 얻은 서버의 공개키를 사용해 대칭키를 암호화하여 서버에 전달한다.
- 서버는 자신의 개인키를 사용해 암호화된 대칭키를 복호화하여 대칭키를 얻는다.
- 브라우저와 서버는 대칭키를 사용해 데이터를 주고 받는다.
이후 브라우저와 서버의 세션이 종료되면 대칭키는 폐기된다.
HTTPS 장단점
장점
- 웹사이트의 무결성을 보장한다. 해커가 웹사이트와 브라우저 사이의 통신을 건드리지 못하게 한다.
- 해커가 웹사이트와 브라우저 사이의 통신을 몰래 수신하는 것을 방지한다.
- 웹 플랫폼의 신기능들을 실행하기 위한 사용자의 명시적인 권한 허락을 요청할 수 있다.
단점
- 텍스트를 암호화해서 주고 받기 때문에 HTTP보다 속도가 느려질 수 있다.
- 신뢰할 수 없는 인증기관을 통해 발급받은 인증서를 사용하는 경우 안정성을 보장할 수 없다.
참고