꾸준히

SSL 본문

Ping!

SSL

Jii- 2023. 2. 16. 19:10

HTTP vs HTTPS

HTTP

HTTP는 Hypertext Transfer Protocol의 약자이다. Hypertext란 문서와 문서가 링크로 연결되어 있는 형태의 문서 체계를 의미하며 Hypertext의 가장 중요한 문서 체계가 HTML이다. HTML을 전송하기 위한 통신규약이 HTTP인 것이다. 

HTTPS

HTTPS는 HTTP와 마찬가지로 HTML을 전송하기 위한 통신규약이지만 HTTP의 보안 취약점을 보완한 프로토콜이다. HTTPS에서 마지막 글자 'S'는 "Secure"이다. HTTP는 원문 그대로 서버에 전송된다는 취약점을 가지는데, HTTPS 프로토콜을 이용하면 전송하는 데이터와 전송받은 데이터가 암호화되기 때문에 제삼자는 이를 몰래 도청할 수 없게 된다. 

 

HTTPS와 SSL

HTTPS는 SSL(Secure Sockets Layer) 프로토콜 위에서 작동하며 SSL을 사용해 데이터를 보호한다. 

SSL의 동작 계층

OSI 7 Layer

 

1주차_정보보안과 해킹 기초, 네트워크 기본

정보보안과 해킹 기초 세션 (Session) 세션은 사용자와 컴퓨터 또는 두 컴퓨터 사이의 활성화된 접속, 로그인된 상태를 의미한다. 웹 서버와 같은 각종 서버는 클라이언트의 세션을 인증함으로써

ji-s-blog.tistory.com

 

SSL과 TLS

SSL은 넷스케이프에서 발명되어 사용되다가 국제 인터넷 기술 위원회 IETF의 관리로 변경되어 TLS이라는 이름으로 바뀌었다. TLS는 Transport Layer Security의 약자이다. 정식 명칭은 TLS인 셈이나 많은 이들이 SSL로 부르고 있다.  

 

SSL 디지털 인증서

SSL 디지털 인증서란 클라이언트와 서버 간의 통신을 제삼자가 보증해 주는 전자화된 문서이다. 클라이언트가 서버에 접속한 직후에 서버는 클라이언트에 디지털 인증서 정보를 전달한다. 클라이언트는 이 인증서 정보가 신뢰할 수 있는지를 검증한 후 다음 절차를 수행한다. 

 

인증서의 이점은 다음과 같다. 

  • 통신 내용이 공격자에게 노출되는 것을 막을 수 있다. → 암호화 필요
  • 클라이언트가 접속하려는 서버의 신뢰성을 판단할 수 있다. 
  • 통신 내용의 악의적 변경을 방지할 수 있다. 

 

인증서의 기능은 크게 두 가지가 있다. 

  • 클라이언트가 접속하려는 서버의 신뢰성을 판단할 수 있다. 
  • SSL 통신에 사용할 공개키를 클라이언트에 제공한다. 

 

공개키란? 

 

2주차_암호학1, 쿠키, 세션, 토큰, JWT

암호학(Cryptography) 암호학(Cryptography)은 비밀이라는 뜻의 "crypto"와 방법이라는 뜻의 "graphy" 결합으로 비밀을 다루는 방법이다. 암호의 3가지 특성에는 기밀성, 무결성, 인증이 있다. 기밀성(Confidenti

ji-s-blog.tistory.com

 

CA

인증서는 클라이언트가 접속하려는 서버의 신뢰성을 판단하는 역할을 하는데 이때 서버의 신뢰성을 누가 보장하느냐에 대한 이슈가 생긴다. 이 역할을 하는 곳이 CA이다. CA(Certificate Authority)는 민간 기업으로 어떤 사이트가 신뢰할 수 있는 사이트인지 혹은 그 사이트가 맞는지를 보장하는 역할을 하는 민간 기업이다. Root Ceritificate라고도 불리며 엄격한 기준에 따라 브라우저 벤더가 선정한다. 브라우저 벤더는 선정된 목록을 자사의 브라우저 리스트에 탑재한다. SSL을 이용해 암호화 통신을 제공하려면 CA를 통해 인증서를 구입해야 한다. 

(개발이나 사적인 목적으로 SSL을 이용할 때에는 직접 CA 역할을 할 수 있으나 공인된 인증서가 아니기 때문에 브라우저가 사용자에게 경고 메세지를 보낸다.)

 

SSL 통신 과정

SSL 통신과정 - 1. TCP Handshake

HTTP처럼 TCP Handshake를 통해 TCP 연결을 진행한다. 이후 SSL Handshaker가 시작된다. 

 

SSL 통신과정 - 2. Certificate Check

우선, 클라이언트가 서버에 접속하는데 이 단계를 "Client Hello"라고 부른다. 이 단계에서 클라이언트는 클라이언트 측에서 생성한 랜덤 데이터, 클라이언트가 지원하는 암호화 방식과 SSL 버전, 세션 아이디를 주고받는다. 서버는 이에 대한 응답으로 Server Hello를 한다. 이 단계에서 서버는 클라이언트 측에서 제공한 암호화 방식과 SSL 버전 중에서 선택한다. 그리고 서버 측에서 생성한 랜덤 데이터를 주고받는다. 가장 눈여겨봐야 할 것은 서버가 이 시점에서 인증서를 보내는 것이다. 

클라이언트는 내장된 CA 리스트를 확인하여 서버 측에서 전송한 인증서가 CA에서 발급된 것인지 확인한다. 만약, CA 리스트에 인증서가 없다면 신뢰성이 없다 판단하여 사용자에게 경고 메세지를 보낸다. 인증서가 CA에서 발급되었음이 확인되었다면 클라이언트는 내장된 CA 공개키를 이용해 인증서를 복호화한다. 복호화에 성공했다면 인증서가 CA의 개인키로 암호화되었다는 것이므로 인증서를 전송한 서버의 신뢰성이 확인되었다고 할 수 있다. 

 

SSL 통신과정 - 3. Key Exchange

클라이언트는 서버로부터 받은 랜덤 데이터와 클라이언트가 생성한 랜덤 데이터를 조합하여 pre master secret 키를 생성한다. 이 키를 서버에 전달할 때 공개키 방식을 사용한다. 인증서에 있는 서버의 공개키로 pre master secret 값을 암호화하여 서버에게 전달한다. 

서버는 전달받은 데이터를 비공개키로 복호화한다. 그리고 서버와 클라이언트는 일련의 과정을 거쳐 pre master secret 값을 master secret 값으로 바꾼다. master secret 값으로 session key를 생성한다. 

 

SSL 통신과정 - 4. Data Transmission

 서버와 클라이언트는 session key를 대칭키로 이용해 데이터를 암호화하여 주고받는다. 데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려주고 통신에 사용된 세션 키를 폐기한다. 

 

 

참고 강의 : 

https://youtube.com/playlist?list=PLCZ-8rvakaqbplQZAoUku8uuxUgbLQm-1

https://youtu.be/j9QmMEWmcfo 

 

'Ping!' 카테고리의 다른 글

MySQL, PHP를 이용한 간단한 게시판 구현  (1) 2023.03.14
ARP 스푸핑 실습  (1) 2023.03.02
VPN  (1) 2023.02.23
암호학1, 쿠키, 세션, 토큰, JWT  (2) 2023.02.09
정보보안과 해킹 기초, 네트워크 기본  (1) 2023.02.02