[Network] HTTPS, SSL/TLS, 인증서
HTTP
HTTP(Hyper Text Transfer Protocol)
- 가장 일반적인 웹 콘텐츠 전송 프로토콜
- 상태가 없는(stateless) 프로토콜 (상태가 없다는 것은 각각의 데이터 요청이 서로 독립적으로 관리된다는 뜻)
- stateless라는 특징 덕에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되기 때문에 성능에 이점
- TCP/IP 통신 위에서 동작
- 기본 포트 = 80번
HTTP 보안상의 문제
- 평문 통신이기 때문에 도청이 가능
- 완전성을 증명할 수 없기 때문에 변조 가능
- 통신 상대를 확인하지 않아 위장 가능
- 의미없는 요청도 수신하기 때문에 DoS 공격 당할 수 있음
HTTPS
HTTPS(Hyper Text Transfer Protocol + Secure Socket Layer)
- 기본적으로 HTTP와 거의 동일함
- HTTP 메시지에 포함되는 정보에 보안요소가 추가된 것이 가장 큰 차이
- 모든 Request와 Response는 네트워크로 보내지기 전에 SSL 계층을 통해 암호화
- HTTP의 하부에 SSL/TLS의 보안 계층이 추가된 형태
SSL/TLS
SSL(Secure Socket Layer)
- 1973년 Netscape사에 의해 개발된 통신 규약
- 응용계층과 전송계층의 사이에서 동작하여 telnet, ftp, http등의 프로토콜의 안전성 보장
- 서버 인증, 클라이언트 인증, 기밀성 보장
- 전자상거래 등에 이용
- 키의 신뢰성 문제 해결을 위해 CA(인증기관) 개념을 도입
TLS(Transport Layer Security)
- 기존의 SSL보다 보안이 강화된 SSL v3을 표준화해서 붙인 이름
- TLS의 각 버전은 SSL v3의 각 하위버전과 연결됨
- SSL v3.1이 TLS의 1.0에 해당하고 이후 SSL의 3.2, 3.3버전이 각각 TLS의 1.1, 1.2버전
- 현재 대부분의 웹 브라우저는 TLS 1.2버전을 지원
SSL 프로토콜 통신 과정
- Client Hello (Client -----------> Server)
- 지원 가능한 암호방식, 키 교환 방식, 서명 방식, 압축 방식 등을 서버에게 알림
- 32Byte의 임의 데이터를 추가로 전송(NONCE : 랜덤 생성 토큰)
- Server Hello (Client <----------- Server X 2번)
- 지원 가능한 암호방식, 키 교환 방식, 서명 방식, 압축 방식 등을 클라이언트에게 알림(1회차)
- 1회차 통신 때 서버도 32Byte의 임의 데이터 추가로 전송(NONCE : 랜덤 생성 토큰)
- 서버측 공개키가 포함된 인증서를 클라이언트에게 보냄(2회차)
- 인증서 확인 및 대칭키 전송 (Client -----------> Server)
- 서버가 전달한 인증서가 CA(인증기관)에 의해 발급된 인증서인지를 웹 브라우저에 내장된 CA의 리스트와 CA 인증서를 통해 확인
- 통신에 사용하기 위한 대칭키를 서버의 공개키로 암호화하여 전송
- 상호간의 완료 메시지
- 비밀키로 서로 암호화 통신
인증서
공개키를 기반으로 하는 알고리즘인 x.509에 따라 만들어진 전자 신분증
인증서 발급 절차
- 서버에서 서버 정보와 Publi Key를 인증기관으로 보내 인증요청
- 인증기관에서 검증을 거친 후 서버 정보와 Public Key를 인증기관의 Private Key로 암호화하여 인증서를 제작
- 서버로 인증서 발급
- 인증기관에서 웹 브라우저로 Public Key를 제공해 브라우저에 내장됨
검색창 옆의 자물쇠를 눌러보면 인증서를 확인할 수 있다
인증서를 눌러보면 인증 기관과 인증서 정보를 확인할 수 있다
References