배포한 프로젝트는 아직 https를 사용하지 않습니다. https를 사용하기 전에 이해하고자 얄코님 영상을 보고 내용을 정리해봤습니다.
잘못된 점이나 미흡한 부분은 댓글로 알려주시면 감사하겠습니다~
https는 http의 보안 문제를 해결하기 위해 사용된다.
데이터를 암호화하고, 사이트의 위/변조를 검증하는 방법으로 대칭키와 비대칭키가 사용된다. 먼저 대칭키와 비대칭키에 대해서 알아본다.
정보를 암호화/복호화 할 때 사용하는 규칙을 키라고 한다. 대칭키는 정보를 주고 받는 양쪽이 같은 키를 갖는 방식이다. 클라이언트가 키를 사용해서 데이터를 암호화해서 전달하고 서버에서도 같은 키를 사용해서 데이터를 복호화한다. 이 방식의 단점은 처음 한 번은 키를 공유하기 위해서 키를 전송해야 하는데 이때 키가 노출되면 암호화가 의미 없어진다.
비대칭키는 대칭키의 단점을 보완하기 위해서 사용된다. 대칭키와 다르게 비대칭이란 말 그대로 클라이언트와 서버가 서로 다른 키를 가지고 암호화/복호화하는 방법이다. A키로 암호화하면 B키로 만 복호화 할 수 있고, 반대로 B키로 암호화하면 A키로 만 복호화 할 수 있다. A(개인)키는 서버에 숨겨두고 B(공개)키는 그냥 공개한다. 데이터를 탈취해가도 개인키만 외부로 노출하지 않으면 외부에서 데이터를 복호화할 수 있는 방법이 없다.
비대칭 키를 사용해서 접속하는 사이트가 정상인지 판단할 수도 있다. 서버가 개인키로 암호화한 정보를 클라이언트에게 보내면 클라이언트는 공개키로 복호화 해보고, 문제가 없다면 정상 서버와 통신하고 있다는 뜻이다. 다만 공개키가 위/변조 되었을 가능성이 있기 때문에 공개키를 인증해주는 Certificate Authority(CA)가 있다. 우리가 사용하는 브라우저에는 CA의 공개키가 내장되어 있고 이걸 사용해서 공개키의 위/변조 여부를 판단한다.
조금 더 자세하게 전체 과정을 살펴본다.
얄코님 영상에서 이 과정을 ‘악수’라고 표현하셨는데 얼핏 들어본 ‘3 Way Handshake’ 랑 관련이 있는 건지 아니면 그냥 개념적으로 악수를 했다고 표현하신 건지 잘 모르겠다.
아직은 클라이언트로 중요한 데이터를 받지 않는다고 생각해서 https의 필요성을 느끼지 못했는데 내 사이트에 신뢰도를 높이기 위해서는 https를 사용하는 것이 좋겠다. 곧 인증기능을 달 생각이니까 추가해놓아야겠다.