"어떠한 내용을 내가 웬만큼은 이해하고 있다." 라고 말할 정도가 되려면 남에게 설명을 할 수 있는 정도, 즉 발표를 해봐야한다고 생각한다.
멋진 개발자를 꿈 꾸는 친구들에게 가벼운 자유주제 테크톡 스터디를 제안했고, 달에 한번씩 모이기로 하였다.😊
내가 준비한 첫번째 발표주제는!!
HTTPS의 암호화 방식과 Client와 Server는 어떻게 통신할까?
우선 HTTP와 HTTPS의 차이부터 알아보자
HTTP는 HyperText Transfer Protocol이라고 하는 Client와 Server가 서로 데이터를 주고 받을 수 있는 통신규약이다.
Client는 Server에게 HTTP요청을 보내고, Server는 Client에게 HTTP응답을 보낸다.
이 둘은 이렇게 HTTP라는 프로토콜을 이용하여 주로 html문서를 주고받는다.
'
HTTP는 보안을 다루지 않기 때문에 중간에 해커가 들어온다면, 정보가 그대로 넘겨지게 되는것이다.
HTTPS(HyperText Transfer Protocol over Secure Socket Layer)는
HTTP 요청 및 응답을 보내기 전에 "보안" 요소 (암호화)를 추가한 것이다.
그래서 해커가 침입해도 암호화 된 문자만 보이기에 그 안에 담긴 진짜 정보를 바로 알 수 없다.
SSL이란 전송계층에서 사용되는 암호화 기반의 프로토콜이다.
왼쪽 사진과 같이 HTTP 서버에 접속했을 경우, 보안 연결이 되지 않았다는 주의 문구를 많이들 보았을 것이다. 위험하다!!
그래서 SSL 프로토콜 위에서 서버를 돌리면 HTTPS 서버가 되는 것이다.
이 HTTPS 서버에는 자물쇠 모양이 있는데, 펼쳐보면 오른쪽 사진과 같은 인증서들을 볼 수 있다.
SSL인증서는 누가 주는데? → 공인 된 기관 CA에서 발급해준다.
CA인증을 어떻게 받는건데?
그 전에~!~! 먼저 알아야 할 SSL 암호화 방식이 있다
대칭키는 동일한 키로 암호화와 복호화를 한다.
Ex)
1. A가 B에게 'Hello'라는 문자를 보내고 싶어한다.
2. 해당 문자열을 대칭키로 암호화를 해서 알 수 없는 문자를 만든다.
3. B에게 전송한다.
4. B는 해당 문자를 대칭키로 복호화한다.
5. 'Hello'라는 문자열을 얻는다.
비대칭키는 공개키라고도 (많이) 불린다.
비대칭키는 한쌍의 공개키와 개인키를 가지고 있다.
공개키는 말 그대로 모든 사람에게 공개되어있는 키이고, 개인키는 자신만 가지고 있다
이 암호화 방식을 기억하면서, 이번엔 SSL 발급과정과 SSL 통신과정을 알아보자
왜 중고거래로 치면 구매자는 신뢰가 가는 (사기이력이 없는) 판매자에게 구매하고 싶고, 판매자는 신뢰를 주기 위해 핸드폰 인증, 동네인증, 안전결제 인증 등을 사전에 진행한다.
이 판매자 입장과 같이, Server도 자신이 믿을만한 서버라고! 보안이 철저한 서버라고! 내세울만 한 인증서를 받아야한다.
그 인증서가 바로 SSL 인증서 다
한 회사와 CA기관이 있다.
회사는 CA에게 인증서 서명요청(CSR)에 본인 회사의 '공개키'와 회사 정보들을 작성해서
CA에게 "너네 기관은 신뢰 가능한 기관이라고 알려져 있지! 우리 회사 정보를 보고 적합하다면 너네 개인키로 서명해줘" 라고 요청을 한다.
그럼 이 CA인증기관은 오 그래 제대로 된 회사구나 하고 CA의 '개인키'로 암호화해서 인증서를 발급해준다.
이 과정으로 회사는 인증서를 가질 수 있게 되었다!
근데 왜 인증서가 여러개인가?
인증서체인은 최종 ROOT CA의 자체서명 인증서를 받을때까지 반복하는 구조를 말한다
일반적으로 인증서는 3계층으로 이루어진다.
위에서부터 대빵인 루트인증서, 중간인증서(여러개 가능), 서버인증서
위 회사가 이 과정을 한바퀴 돌아서 얻어 낸 인증서가 하단의 서버인증서인 셈이다.
ROOT CA입장에서는 타 CA기관도 민간 기업과 같기때문에 같은 과정을 거쳐 인증서를 받아야한다..(→ 중간인증서)
아무튼, 이제 이 회사(서버)는 드디어 인증서를 얻었다!
이제 Client와 통신 준비를 하기 위해 핸드셰이크과정을 지나야한다.
Hand Shake란 Client와 Server가 서로 신뢰성을 확인하고 약간의 정보를 주고 받는과정을 악수한다고 표현해 붙여진 이름이다.
이 Session키는 앞으로 둘이 통신을 할 대칭키로 사용하게 된다.
데이터 전송이 끝나면 SSL 통신이 끝났음을 서로에게 알려주고, 이 때 통신에서 사용한 대칭키인 Session key는 폐기한다.
이 핸드셰이크 과정은 우리가 브라우저를 방문할 때마다 동작한다
이렇게 첫 발표를 마쳤다.
잘못 안 부분이 있다면 지적해주세요😉
HTTP
HTTPS
대칭키
비대칭키
Ceriticate Chain(인증서 체인)
Hand Shake
발표를 하는 것은 생각보다 인형에게 설명하는 것보다 어렵더라🥴🤓