HTTP
[HTTP] 암호화와 HTTPS
날아
2023. 1. 31. 03:23
HTTP의 문제점
- HTTP는 암호화되어있지 않다. 따라서 누군가가 서버-클라이언트 간의 http 메시지를 볼 수 있다.
- 즉, 보안에 취약하다.
1. HTTPS - Hypertext Transfer Protocol Secure
- SSL/TSL를 이용한 HTTP 통신
- SSL(Secure Socket Layer) : 전송되는 데이터를 암호화
- 현재는 TSL(Transport Layer Security)로 발전되어 두 단어를 혼용해서 사용한다.
- 클라이언트가 서버에 보내는 정보들을 암호화하기 때문에 보안에 유리하다.
- 클라이언트는 접속한 사이트가 신뢰할만한 사이트인지 알 수 있다.
1-1. 암호화 기본 개념
- 공개키(Public Key)와 비밀키(Private Key) : 공개키는 모두가 볼 수 있는 키이며 비밀키는 소유자만이 가지고 있는 키로 암/복호화에 사용된다.
- 대칭키 암호화 : 서버와 클라이언트가 암/복호화에 동일한 비밀키를 사용하는 방식. ex) 같은 해독문을 가지고 있는 셈이다.
- 동일한 키를 양쪽이 공유하는 것은 쉽지 않다. 한 쪽에서 한 번은 반대쪽으로 비밀키를 전송해야 하는데, 중간에서 해커들이 가로챌 위험이 있다. 다만 속도가 빠르다.
- 비대칭키 암호화(공개키 암호화) : 서버와 클라이언트가 암/복호화에 각각 다른 비밀키를 사용하는 방식. 공개키를 통해서 암호화를 하고 개인키를 통해서 복호화를 한다.
- ex) 네이버 서버는 두 키중 하나는 자신만이 비밀로 보관하고(개인키) 나머지 한 키는 대중들에게 누구나 볼 수 있도록 공개한다.(공개 키)
- 인증기관(Certificate Authority, CA) : 클라이언트가 접속을 요청한 서버가 의도한 서버가 맞는지 인증해주는 역할을 하는 보증된 기업들이다. 클라이언트는 서버에 요청을 해서 CA가 발급한 인증서를 받은 뒤 CA의 공개키로 복호화하여 신뢰할 만한 인증서인지 검증한다. CA의 공개키로 복호화되는 자료는 오직 CA의 비밀키로 암호화한 경우밖에 없기 때문에 복호화되면 신뢰할 만한 것이다.
1. HTTPS 동작방식
- 클라이언트는 어떤 랜덤 데이터1를 생성해서 서버에 보낸다.
- 서버는 답변으로 서버측에서 생성한 랜덤데이터2 + 인증서를 보낸다.
- 클라이언트는 인증서의 진위여부를 판단하기 위해 브라우저에 내장된 CA의 공개키로 인증서를 복호화한다. (비대칭키 시스템) CA의 인증을 받은 인증서들은 해당 CA의 개인키로 암호화가 되어있다.
- 복호화된 인증서 안에는 서버의 공개키가 포함되어있다.
- 랜덤데이터1과 랜덤데이터2를 조합하여 대칭키로 사용할 것인데 이는 탈취당하면 안되기 때문에 인증서에 들어있던 공개키로 암호화하여 서버에 전송한다.
- 서버는 가지고 있는 개인키를 이용해 복호화하여 클라이언트가 보낸 대칭키를 얻는다.
- 그 이후 대칭키를 이용해 데이터를 주고 받는다.
- 세션이 종료되면 대칭키를 폐기한다.
왜 6-7번에서 대칭키를 이용해 데이터를 주고받는가?
비대칭키의 방식으로 데이트를 암/복호화 하는것은 대칭키로 할 때보다 훨씬 많이 컴퓨터에 과부화를 준다. 사이트를 이용하며 주고받는 대규모의 데이터들을 일일히 비대칭키 방식으로 암/복호화 하는 것은 무리다. 따라서 대칭키로 암호화를 한다.
출저