[네트워크 CS] HTTPS의 원리

휘루·2023년 4월 19일
0

네트워크

목록 보기
2/2

클라이언트 서버
브라우저 naver.com

대한민국 국민은 정부를 통해 여권을 발급 받듯이
서버는 CA라는 곳에 인증서를 발급 받습니다.

인증서는 개인키를 암호화해서 서버에 넣어줍니다.
가장 유명한 건 Let's encrypt로 인증서 발급을 할 수 있습니다.
zerocho.com도 이걸로 인증서 발급을 받아 만들었습니다.

브라우저가 이제 인증을 요청하면 암호화 된 인증서를 보내줍니다.
CA 공개키로 보내고 풀었는데 잘 풀어지지 않았다면 인증서가 변조되었거나, 안전한 연결이 아닙니다. 라는 경고가 뜹니다.

이런식으로 경고가 뜹니다.

브라우저에서 인증서를 공개키로 복호화를 하면 하나가 더 나오는데 서버 공개키가 나옵니다.
서버 공개키가 나오면 서버 비밀키는 서버에서 갖고 있습니다.

RSA 방식

이제 브라우저랑 서버랑 믿을만한 걸 알게 되었으니 데이터를 암호화용으로 할 키를 만듭니다.

서버 공개 키 -> 암호화 -> 데이터 암호화용 키 -> 서버
서버 비밀 키 -> 복호화 -> 데이터 키 순으로 처리를 합니다.

공개 키, 비밀 키를 활용한 이 방식을 RSA 방식이라 합니다.

해킹 당할 경우

이 키를 보낼 때 해킹을 당할 수가 있습니다.
이 구간에서 해킹 공격이 많이 들어 옵니다.

이럴 경우 DH를 사용하게 됩니다.

DH가 뭐냐면 데이터 암호화용 키, 데이터용 키를 만들수 있는 조각입니다.
조각들 끼리 만나서 합쳐서 키를 만드는 걸 말합니다.
즉 키 자체를 서버에 보내는 게 아니라 조각을 보내서 조립해 서버를 만든다고 보면 됩니다.

이 조각들은 해커가 얻어도 아무것도 못합니다.

DHE 이라고 있는데 특정 시간마다 키를 바꾸는 겁니다.
그래서 노출되었다 하더라도 일정 시간만 노출될 수 있습니다.
해커는 매시간마다 해킹할 수는 없거든요.

그래서 RSA 알고리즘 보다는 DHE 알고리즘을 더 선호됩니다.
DHE는 HTTP3, TLS 1.3이 사용됩니다.

정리

HTTP 서버가 CA로부터 여권같은 인증서를 발급 받습니다.
브라우저는 CA라는 키로 복호화를 해서 CA가 봉인한 인증서다 라는 걸 확인을 합니다.
서버 공개키가 나와서 데이터 암호화용 키, 이제는 조각이죠.

조각을 암호화해서 서버를 보내고 서버에서도 자기만의 조각을 만들어서 클라이언트로 보내고
이런 식으로 교환을 합니다.

서로 암호화 된 조각을 주고 데이터 암호화용 키를 만들어서 그 뒤에 HTTP 데이터를 암호화해서 주고 서버에서 복구하는 과정으로 보시면 됩니다.

데이터 암호화용 키도 특정 시간마다 계속 바뀌는 구조여서 일정 시간동안 노출이 되더라도
다음 시간에는 새로운 키가 만들어지는 안전한 알고리즘입니다.

https를 적용하면 해커들한테 데이터 유출될 일이 없다고 생각해도 됩니다.
get으로 하냐 포스트로 하냐가 중요한게 아니고 https를 적용 하는가 안하는가가 중요합니다.

https를 적용하고 Let's incript도 공짜로 적용할 수 있습니다.

profile
반가워요

0개의 댓글