공부/네트워크

[네트워크] HTTPS, Key

ghhong 2022. 2. 15. 11:12

네이버 들어가서 주소 왼쪽에 자물쇠를 클릭해보면 이 사이트는 보안연결(HTTPS)이 사용되었다고 뜬다.

HTTPS는 HyperText Transfer Protocol over Secure Socket Layer. 즉, www의 통신 프로토콜인 http의 보안이 강화된 버전이다. HTTPS는 소켓 통신에서 일반 텍스트를 주고받는 대신에 SSL을 이용해 세션 데이터를 암호화하여 사용한다. 

 

클라이언트와 서버가 통신할 때 클라이언트는 이 서버가 진짜인지 가짜인지를 모릅니다. 서버는 자신이 진짜임을 인증하기 위해 공인기관(CA)로부터 별도의 인증서를 받는데 이를 SSL인증서라고 합니다. 이 인증서를 발급받은 서버는 진짜임이 인증되고 클라이언트와 어떻게 데이터를 암호화해서 주고받을 것인지 협상단계로 넘어가게 됩니다.

1. 클라이언트 : 이 서버가 신뢰할 수 있는 사이트인가?

2. 서버 : 신뢰받기 위해 인증기관에 서버 정보를 제공하고 SSL인증서를 받고 클라이언트에게 보내야지

3. 클라이언트 : 이 인증서가 진짜인가? 인증기관에 물어봐야지. 검증되면 서버를 믿을 수 있겠다.

 

클라이언트가 서버를 신용하게 됐으므로 데이터를 어떻게 암호화할 것인지 협상단계로 들어간다. 이때 사용되는 암호화 알고리즘 집합을 Cipher Suite라고 하고 이러한 전반적인 과정을 SSL HandShake라고 한다. 

 

 

암호화 : 데이터를 감추는 것. Key를 이용하여 데이터를 암호화한다.

복호화 : 암호화된 데이터를 원래 데이터로 되돌리는 것. Key를 이용하여 복호화한다.

Key : HTTPS에서 데이터를 암복호화하기 위한 것

공개키 : Public Key, 통신과정에 참여하는 웹 브라우저, 서버와 같은 키 발행자뿐만 아니라 해커가 알아도 상관없는 키로, 개인키와 쌍을 이루어 존재한다(공개키-개인키). 공개키는 보통 데이터를 암호화하는데 사용한다.

개인키 : Private Key, 키 발행자만 갖는 키로 공개키와 쌍을 이루어 존재한다. 보통 데이터를 복호화하는데 사용한다.

대칭키 : 암복호화에 동일한 하나의 키를 사용하는것.

 

위에서 클라이언트와 서버가 SSL인증서를 통해 신뢰가 생긴 이후에 협상을 한다고 했다.

1. 서버는 한 쌍의 공개키와 개인키를 생성한다. 그리고 서버 내 사이트의 각종 정보들과 자신의 공개키를 인증기관에 전달하여 SSL인증서를 요청한다.

2. 인증기관(CA)는 인증서를 발급한다. 이 인증서에는 서버의 도메인을 비롯한 서버임을 인증하는 여러 정보를 갖고 있다. 이때 인증기관은 자신만의 한 쌍의 공개키와 개인키를 생성하고 SSL인증서를 인증기관의 개인키로 암호화하여 서버에게 전달하고 서버는 이 SSL인증서를 게시한다.

3. 웹 브라우저는 인증기관의 개인키로 암호화된 SSL인증서를 서버로부터 전달받고 이 인증서를 검증하기 위해 인증기관에서 공개키를 가져와 SSL인증서를 복호화해봅니다. 만약 복호화되어 서버의 정보를 확인할 수 있다면 SSL인증서는 진짜인 것이고 서버가 진짜임을 밝힐 수 있습니다. 그리고 복호화한 데이터 내에 있는 서버의 공개키를 얻을 수 있습니다.

4. 웹 브라우저가 서버를 신뢰하는 상항에서 방금 전달받은 서버의 공개키로 실제 데이터 암호화에 사용할 비밀키를 암호화하여 서버에 전달한다.

5. 서버는 웹 브라우저가 자신(서버)의 공개키로 암호화하여 전달한 비밀키(대칭키)를 자신의 개인키로 복호화한다. 이로써 웹 브라우저와 서버는 동일한 비밀키를 보유하게 됐다.

 

 

 

 

'공부 > 네트워크' 카테고리의 다른 글

[네트워크] SSL, HTTPS  (0) 2022.05.12
[네트워크] 패킷의 전달과 라우팅  (0) 2022.04.07
[네트워크] SNMP  (0) 2022.02.25
[네트워크] MDC/MAC  (0) 2022.02.15
[네트워크] 서브네팅, 서브넷마스크  (0) 2022.02.14