[Network] 6-4. HTTPS

KYJ의 Tech Velog·2023년 4월 25일
0

Network

목록 보기
12/21
post-thumbnail

HTTPS(Hyper Text Transfer Protocol Secure Socket layer)는 HTTP 통신 과정에서 내용을 암호화하여 데이터를 전송하는 방법입니다. SSL(또는 TLS)라는 기술을 이용하여 암호화합니다.

SSL(보안 소켓 계층, Secure Sockets Layer)
SSL은 웹사이트와 브라우저(혹은, 두 서버) 사이에 전송된 데이터를 암호화하여 인터넷 연결을 보안을 유지하는 표준 기술입니다. 이는 해커가 개인 정보 및 금융 정보를 포함한 전송되는 모든 정보를 열람하거나 훔치는 것을 방지합니다.

TLS(전송 계층 보안, Transport Layer Security)
TLS는 가장 최신 기술로 더 강력한 버전의 SSL입니다. 그러나 SSL이 더 일반적으로 사용되는 용어이기에, 여전히 보안 인증서는 SSL이라 불립니다.

HTTP의 문제점은 데이터가 전송되는 도중에 해커에게 데이터들이 탈취될 수 있다는 것입니다. 이를 중간자 공격이라 합니다. 정확한 정의는 클라이언트와 서버 사이에서 해커가 서로의 요청, 응답의 데이터를 탈취 및 변조하여 다시 전송하는 것입니다.

따라서, HTTPS를 사용하여 전송되는 데이터를 암호화하여 이러한 보안 취약점을 해결합니다.

암호화

대칭키 vs 비대칭키

대칭키 알고리즘은 암호화와 복호화를 같은 키로 진행합니다. 서버는 통신 시작 시 대칭키를 로컬 컴퓨터에게 전송할 것입니다. 로컬 컴퓨터는 비밀번호와 같은 중요한 정보를 대칭키로 암호화하여 서버에 전송합니다. 서버는 암호화된 정보를 대칭키로 복호화해서 얻습니다. 대칭키의 문제는 대칭키 자체를 해킹당할 가능성이 있다는 것입니다.

비대칭키 알고리즘은 암호화와 복호화를 다른 키로 진행합니다. 공개키(Public Key), 개인키(Private Key)가 있습니다. 공개키로 암호화할 경우 개인키로만 복호화할 수 있고, 개인키로 암호화한 경우 공개키로만 복호화할 수 있습니다. 공개키는 이름 그대로 사용자들에게 공개되는 키이고 개인키는 서버가 유일하게 저장하는 키입니다. 이로 인해 대칭키의 문제를 해결할 수 있습니다.

서버는 로컬 컴퓨터에게 공개키를 전달합니다. 로컬 컴퓨터는 공개키를 통해 중요한 정보를 암호화하여 서버에 전송합니다. 서버는 개인키로 복화하여 정보를 얻습니다. 해커가 공개키를 알더라도 결국 개인키가 없다면 정보를 복호화할 수가 없습니다.

따라서, HTTPS는 비대칭키 알고리즘을 이용하여 정보를 암호화하고 복호화합니다.

SSL 인증서

비대칭키 알고리즘도 여전히 해킹의 위험이 있습니다. 바로 공개키 자체가 위조되는 것입니다. 해커가 서버인 척 자신의 공개키를 로컬 컴퓨터에게 제공합니다. 로컬 컴퓨터는 이 공개키가 진짜라고 생각하고 이 공개키로 정보를 암호화하여 서버에 전송합니다. 해커는 이 정보를 중간에 탈취해서 자신의 개인키로 복호화하여 정보를 얻을 수 있습니다.

이를 해결하기 위한 것이 SSL 인증서입니다. SSL 인증서는 서버에서 주는 공개키가 신뢰할 수 있는 것인지 확인시켜주는 인증서입니다. 공개키가 서버에서 온 것임을 공인된 인증기관(CA)에서 만든 인증서로 증명합니다.

SSL 인증서에는 서버의 공개키와 CA에서 그 공개키가 맞다고 증명한 Signature가 포함됩니다. 사사용자는 이 Signature를 통해 공개키가 신뢰가능하다는 것을 확인할 수 있습니다.

SSL 인증서를 만드는 Signing 과정은 다음과 같습니다. 서버는 CA에게 증명이 필요한 (서버-공개키)를 제출합니다. CA는 이를 해시 함수를 통해 해시 값으로 바꾼 후, 이를 CA의 개인키로 다시 암호화합니다. 이 값이 Signature입니다. 앞서 설명드렸듯이 이 값은 CA의 개인키로 암호화되었기 때문에 CA의 공개키로만 복호할 수 있습니다. 최종적으로 인증서는 (서버-공개키)와 Signature를 포함하여 만들어집니다. 서버는 이 인증서를 (서버-공개키) 배포에 사용합니다.

서버는 SSL 인증서를 로컬 컴퓨터에 전송합니다. 인증서에 포함된 (서버-공개키)를 해시 해시 함수를 통해 해시 값으로 변환합니다(어떤 해시 함수인지로 인증서에 저장). 인증서에 포함된 Signature를 CA의 공개키를 통해 복호화합니다. 이 값은 CA가 인증한 해시 값입니다(CA의 공캐키는 인터넷에서 다운로드 가능).

이렇게 구한 두 값을 비교하면 서버의 공개키의 신뢰 여부를 확인할 수 있습니다. 만약 중간에 해커가 끼어들어 자신의 공개키를 로컬 컴퓨터에 보냈다면 방금 구한 두 값이 다를 것입니다. 이렇게 믿을 수 있는 서버의 공개키를 얻을 수 있습니다.

0개의 댓글