HTTPS란?
HTTPS(Hyper Text Transfer Protocol Secure)
TCP/IP 위에 SSL/TLS 층을 추가하여 암호화, 인증 그리고 무결성 보장을 통해 더 안전하게 만들어주는 프로토콜이며, 기본 433포트를 사용한다.
SSL(Secure Socket Layer)
웹 서버와 클라이언트의 통신 암호화 프로토콜이며, 네트워크 상에서 주고 받는 데이터를 보호하기 위해 만들어졌다.(1995년 Nescape 개발) Certificate Authority(CA)라 불리는 서드 파티로부터 서버와 클라이언트의 인증을 하는데 사용된다. HTTPS는 SSL 프로토콜 위에서 돌아가는 프로토콜이며 FTP, NNTP, XMPP 등도 SSL 위에서 돌아가며 보안을 유지할 수 있다.
TLS(Transport Layer Security)
SSL은 1996년 3.0 버전이 출시되었지만, 보안취약점으로 인해 현재는 퇴출된 상태이다. TLS는 국제 인터넷 표준화 기구에서 개발한 것으로, SSL 3.0의 보안취약점을 보완한 통신 보안 프로토콜이다. 현재 TLS는 2018년 1.3 버전이 출시됐다. SSL을 보완한 것이 TLS이지만, 인터넷에 적용되는 통신 보안 프로토콜을 보통 SSL이라 부른다. 하지만 SSL의 마지막 버전인 3.0 마저 금지됐으므로, 현재 사용 중인 통신 보안 프로토콜은 모두 TLS이다.
SSL 특징
- URL 프로토콜은 https이며, 기본 포트는 443이다.
- 통신 데이터가 암호화되어, 패킷이 탈취되는 사고가 발생해도 데이터를 지킬 수 있다.
- SSL 인증서를 통해 도메인의 신뢰성을 검증할 수 있다.
- 데이터 송/수신 과정에서 암/복호화가 발생하므로 속도가 느리다.
SSL 통신 과정
- 클라이언트가 특정 주소에 접근하면, 해당하는 서버에 요청을 보낸다.(Client Hello)
- 난수 데이터
- 암호화 프로토콜 정보
- 클라이언트가 사용 가능한 암호화 방식
- 세션 아이디
- 기타 확장 정보
- 서버가 Client Hello 요청을 받으면, 위의 정보를 담아 클라이언트에게 응답한다.(Server Hello)
- 난수 데이터(Client Hello의 데이터와 다르다.)
- 서버가 사용할 암호화 방식
- 인증서(CA, 도메인, 공개키)
- 클라이언트 인증 확인
- 서버로부터 받은 인증서가 CA에 의해 발급되었는지 본인이 가지고 있는 목록에서 확인하고, 목록에 있다면 CA 공개키로 인증서 복호화를 한다.
- 클라이언트와 서버 각각의 랜덤 데이터를 조합하여 pre mastet secret key를 생성한다.
- pre master secret key을 공개키 방식으로 서버에 전달한다.
- 일련의 과정을 거쳐서 session key를 생성한다.
- 인증서 검토
- 서버가 전달한 인증서가 실제 해당 서버의 인증서인지, 신뢰할 수 있는 CA에서 발급된 것인지, 실제 해당 CA에서 발급받았는지 등 인증서를 검토한다.
- pre master secret key 송수신
- Client Hello, Server Hello에서 송수신한 난수 데이터를 조합하여 pre mastet secret key를 생성한다.
- 이를 Server Hello에서 전달받았던 공개키로 암호환한다. 이 데이터는 서버가 가진 개인키로만 복호화가 가능하다. 즉, 이 데이터는 탈취된다 하더라도 그 내용이 보호된다.
- 서버는 수신된 데이터를 복호화하여 클라이언트와 동일한 pre mastet secret key를 저장할 수 있다.
- 통신키 생성
- 보유한 pre mastet secret key를 토대로 master secret key, session key를 생성한다.
- 이를 통해 클라이언트와 서버가 동일한 키를 보유하게 되므로 암호화 통신이 가능하다.
- 데이터 송수신
- 필요한 데이터는 저장된 session key를 통한 대칭키 암호화 방식으로 암/복호화하여 통신한다.
- 세션 종료
- 클라이언트와 연결이 끊겼을 경우 사용했던 session key는 폐기된다.
Leave a comment