SSL 보안의 필요성
'공개키 암호화 방식 이해하기'에서 알아보았듯이, 인터넷을 통해 전달되는 모든 정보는 다른 컴퓨터가 읽을 수 있다. (이제부터 도청이라고 부르겠다) 따라서 아무도 읽지 못하도록 암호화하는 것이 중요했다.
그런데 중요한 정보를 훔치는 데에는 도청 말고도 수많은 방법이 있다.
한가지 방법은 정상 서버에 가짜 유저가 요청을 보내는 것이다. 이것은 서버측에서 사용자 인증을 강화해서 해결할 수 있다.
또 다른 방법은 가짜 서버를 만들어서 정상 유저가 입력하는 모든 정보를 갈취하는 것이다.
입력하는 정보가 아무리 암호화되어있다고 해도, 가짜 서버에서 복호화 될 수 있는 형태라면 결국 그 정보는 도난 당하게 된다.
따라서 요청을 보낼 곳이 내가 접속하고싶은 서버가 맞는지 확인하는 과정이 아주 중요하다.
이러한 서버 인증을 위해 등장한 것이 SSL 프로토콜이다. SSL을 사용하면 아래 두마리 토끼를 다 잡을 수 있다.
1. 전송하는 데이터를 안전하게 암호화하기
2. 요청이 멀쩡한 서버로 가는 것이 맞는지 검증하기
그리고 HTTP 프로토콜에 SSL 암호화를 덧붙인 것을 특별히 HTTPS 통신이라고 한다.
요청 및 응답의 바디 부분을 암호화하여 데이터를 보호하고 서버를 검증해준다.
이제부터 브라우저에서 HTTPS로 어떤 웹사이트에 접속하는 예시를 통해서 SSL 인증 과정에 대해 알아보자.
SSL 인증 과정
위의 예시에서 정보가 도난당한 이유는 해당 서버가 안전한지 확인하지 않고 정보를 보냈기 때문이다.
그래서 서버가 정말 멀쩡한지 검사하고 안전한 서버의 공개키만을 모아놓는 기업이 등장했다. 이들을 CA라고 한다.
현재 네이버는 DigiCert 인증서를, Sportify는 Certainly라는 기업의 인증서를 사용하고 있다.
어떤 사용자가 새로운 웹사이트를 만들었을 때, CA 기업에게 SSL 인증을 받는 과정은 아래와 같이 이루어진다.
1. CA 기업이 SSL 인증서 발급 요청을 받으면, 먼저 서류를 받아서 해당 서버가 정상적인 사이트인지를 먼저 심사한다.
2. 심사를 통과하면 SSL 인증서에 서버 공개키(그림에서는 대칭키A) 외에도 서버 도메인, CA 기관명 등의 정보를 담아 저장한다.
3. CA에서 자체적으로 사용하는 CA공개키, CA비밀키 쌍이 있다. 완성한 SSL 인증서를 CA비밀키로 암호화시킨다.
4. 암호화된 SSL 인증서를 서버에게 돌려준다. 이제부터 이 암호화 인증서를 공개키 대신 사용하면 된다.
이렇게 받은 SSL 인증서를 사용하는데에는 SSL을 지원하는 브라우저가 필수적이다.
HTTPS 접속이 가능한 브라우저들은 신뢰할만한 CA사의 리스트와, 이들의 공개키를 항상 가지고있다.
그래서 서버가 암호화된 SSL 인증서를 가져오면, 확실하게 믿을 수 있는 CA사의 공개키로 복호화를 시도한다.
수상한 사용자가 가짜 SSL 인증서로 조작한 서버에 접속하는 경우를 생각해보자.
브라우저가 아는 CA사의 공개키 중 어느것으로도 복호화가 안된다면 이는 조작된 SSL 인증서라는 뜻이 된다.
따라서 위 그림과 같이 브라우저로부터 경고를 받고, 사용자는 그 페이지에 중요한 정보를 넘기지 않게된다.
피싱 사이트를 거를 때 https 연결을 확인하라는 것도 이러한 이유이다.
SSL 인증서가 조작되었다면 브라우저에서 경고를 띄울 것이기 때문이다.
그렇다면 SSL 인증서랑 통신 내용 암호화는 무슨 관계일까?
SSL 인증서 내부에는 서버 공개키와 암호화 알고리즘이 포함되어있다.
따라서 클라이언트가 요청 내용을 서버 공개키로 암호화해서 보낸다면,
서버 비밀키를 모르는 다른 사람은 아무도 해당 내용을 읽을 수 없게된다.
정리해보면, CA사 인증과 암호화는 모두 비대칭키가 서로를 복호화할 수 있는 유일한 키라는 특징을 활용해서 이루어진다.
이때 CA사의 공개키는 SSL 인증서가 본인 회사에서 발급한 것이 맞는지 검사하는데에 사용되고,
서버 공개키는 통신 내용을 암호화하기 위한 목적으로 사용되었음을 알 수 있다.
복호화 결과를 다시 암호화에 사용한다는 점이 조금 헷갈릴 수 있다. 적어도 난 그랬다ㅠ
공개키 알고리즘에 대해 충분히 이해한 후, 두 스텝 각각을 분리해서 기억하면 쉽게 이해할 수 있다.
SSL 보안의 한계
비대칭키를 활용한 SSL 인증은 확장성 측면에서 큰 이점을 가지지만, 몇가지 허점이 있다.
첫째로, CA사의 심사가 허술해지면 해당 회사를 신뢰할 수 없게된다.
실제로 꽤 신뢰받고있던 무료 CA사에서 피싱사이트를 승인해주면서 피싱사이트가 당당하게 https 인증을 받는 사건이 생긴 적이 있다.
둘째, CA사의 비밀키를 도난당하면 SSL 인증서를 조작해낼 수 있다.
공개키 알고리즘의 전제는 비밀키가 도난당하지 않는다는 건데, 이걸 도둑맞으면 CA사는 끝이난다.
디지노타라는 CA 기업은 실제로 키가 노출돼서 파산했다고 한다.
* 생활코딩 HTTPS 강의 내용과 유영환 교수님 네트워크 강의의 내용을 참고했습니다.
'CS 지식' 카테고리의 다른 글
공개키 암호화 방식 이해하기 (1) | 2024.12.12 |
---|