https/SSL

이민준·2021년 9월 9일
1

https란 무엇인가?

📌 https는 Hyper Text Transfer Protocol over Secure sockets layer 의 약자입니다.

소켓통신 레이어에서 안전성을 더한다는 의미입니다.
또한 자주 들리는 ssl은 http보다 조금 포괄적인 의미의 통신 프로토콜인데, 간단하게 생각해서 http가 ssl을 이용하게된다면 https 입니다.

ssl이 보편화되면서 ITF로 이관되어 tls으로 이름이 새롭게 지어졌다고 합니다. 사실상 같은것으로 생각하면 될 것 같습니다.

ssl이 동작하는 방식은?

대칭키 방식

보내고자하는 데이터를 A가 대칭키 C로 암호화해서 B에게 보냅니다. 그 때 B가 똑같은 대칭 키 C로 복호화해서 데이터를 읽을 수 있습니다. 이 경우 데이터를 전송할 때 해커에게 빼았겨도 해커가 대칭키를 모르면 복호화가 불가능합니다. 그런데 해커가 대칭키까지 해킹해버린다면 손 쉽게 보안이 뚫립니다.

공개키 방식

A가 B에게 A의 공개키를 알려줍니다. B는 A의 공개키로 암호화해서 데이터를 보냅니다. A는 시크릿키로 받은 데이터를 복호화한다. 이렇게 통신할 경우, 공개키를 해킹당하거나 암호화된 데이터를 해킹당해도 정보가 노출되지 않습니다. A의 공캐로 암호화된 데이터는 A의 시크릿키로만 복호화가 가능하기 때문입니다.

👀 과정을 조금 더 자세히 살펴보면,

1. 클라이언트와 서버가 서로의 공개키를 주고 받는다.

2. 클라이언트가 서버로 데이터를 전송할 때는 서버의 공개키로 암호화해서 보낸다. 서버는 비밀키로 이것을 비밀키로 복호화한다.

하지만 공개키 방식은 컴퓨팅파워가 너무 많이듭니다.

📌 따라서 https는 공개키 + 대칭키 방식을 사용합니다.

대칭키를 공개키를 활용해서 인코딩해서 서로 주고 받고, 공개키로 암호화하고 복호화하면서 통신합니다

네트워크 통신 방식

  1. 악수 ( 가장 중요하고 복잡 )
  2. 실제 데이터 전송
  3. 세션종료

👀 사람은 악수를 하면서 많은 정보를 주고 받습니다. 예를 들어서, 악수를 하면서 안녕하세요 하면 한국인, Hello 하면 외국인이라는 정보를 주고 받습니다.

HandShake 과정에서 서버와 클라이언트도 비슷한 과정을 거칩니다. 서버 클라이언트가 서로 웹 서버와 브라우저의 버전이나 어떤 것을 사용하는지 등 이런것들을 탐색합니다.

https에서는 이 과정에서 서버의 인증서를 클라이언트에게 전송하고 클라이언트가 해독할 수 있는 암호화 기법을 서로 공유

Handshake의 자세한 과정

1. 클라이언트가 서버에 접속하면서 클라이언트 헬로를 한다.

😎 클라이언트 헬로란 아래 2,3번 과정이다.

2. 클라이언트 측에서 생성한 랜덤 데이터를 서버로 전송

3. 클라이언트가 지원하는 암호화 방식 리스트가 무엇인가를 서버쪽에 전송

4. 서버는 클라이언트에게 서버 헬로를 한다.

😎 서버 헬로란 아래 5,6,7번 과정이다.

5. 서버 측에서 생성한 랜덤 데이터를 클라이언트로 전송

6. 서버가 클라이언트의 암호화 방식 리스트중 가장 안전한 방법을 선택 후 전송

7. 서버는 클라이언트에게 인증서를 전송

8. 클라이언트는 이 인증서가 브라우저에서 인정하는 인증기관이 발급한 인증서인지 확인, 만약 존재한다면 브라우저는 공개키를 알고 있다.

👀 브라우저는 이미 공인된 인증기관 목록과 공개키를 갖고 있다. 서버가 보낸 인증서가 목록 안에 존재하는 기관이 인증한 인증서인지 확인하는 과정을 거치고, 복호화한다.

9. 이미 갖고 있는 공개키로 복호화 -> 복호화가 된다면 신뢰한다.

10. 복호화 한 인증서 안에는 서버가 생성한 공개키가 존재한다. 여기서 서버의 공개키를 획득하게 된다.

11. 클라이언트와 서버가 랜덤키를 주고받았는데 이를 조합해서 클라이언트는 프리마스터 시크릿이라는 키를 생성한다. 그리고 전 단계에서 인증서 안에서 얻은 서버의 공개키로 프리마스터 시크릿 키를 암호화하고 서버에게 전송한다.

12. 안전하게 도착한 인코딩된 프리마스터 시크릿을 서버는 자신의 비밀키로 복호화한다. 이렇게하면 클라이언트는 이미 알고 있고 서버는 복호화했기 때문에 양쪽 다 알고 있다. 그리고 서버와 클라이언트는 이 값을 일련의 과정을 거쳐서 마스터 시크릿으로 만들고 세션 키라는것을 생성한다.

14. 세션 키를 대칭 키로 사용해서 데이터를 암호화한다.

그 뒤로 암호화된 실제 데이터를 서로 주고 받는 과정을 거친다.

profile
러닝커브가 장점인 개발자입니다.

0개의 댓글