웹에서 https 연결을 지원하기 위해서는 http 연결에 필요한 TCP 연결 외에 TLS handshake라는 과정이 추가로 필요합니다. TLS란 무엇이고 handshake는 어떻게 일어나는지 간단히 알아보겠습니다.
TLS는 Transport Layer Security로 TCP handshake(3-way handshake)가 일어나고 난 뒤, TLS handshake를 통해 연결됩니다.
TLS는 인터넷 상의 커뮤니케이션을 위한 개인 정보와 데이터 보안을 용이하게 하기 위해 설계된 보안 프로토콜입니다. 주요 사례는 웹 사이트를 로드하는 웹 브라우저와 같이 웹 응용 프로그램과 서버 간의 커뮤니케이션을 암호화하는 것입니다.
TLS는 SSL(Secure Socket Layer)라고 불리는 이전의 암호화 프로토콜에서 발전한 것입니다.
HTTPS는 HTTP 프로토콜 상위에서 TLS 암호화를 구현한 것으로 모든 웹 사이트와 다른 웹 서비스에서 사용됩니다.
TLS는 무엇을 합니까?
TLS 프로토콜은 암호화, 인증, 무결성이라는 세 가지 주요 요소를 달성합니다.
웹 사이트나 응용 프로그램이 TLS를 사용하려면, 원본 서버에 TLS 인증서가 설치되어 있어야 한다.
인증 기관이 도메인을 소유한 사람 혹은 비즈니스에 TLS 인증서를 발행한다.
인증서는 서버의 공개 키
와 더불어 누가 도메인 소유자
인지에 대한 중요한 정보를 포함한다.
이 두가지는 모두 서버의 신원을 확인하는 데 중요합니다.
그리고 TLS는 TLS handshake로 알려진 일련의 순서를 통해 초기화된다.
TLS 핸드셰이크의 정확한 단계는 사용되는 키 교환 알고리즘의 유형과 커뮤니케이션 양측에서 모두 지원하는 암호 제품군의 유형에 따라 달라진다. 대부분 RSA 키 교환 알고리즘이 사용된다.
Hello
메시지를 전송하면서 핸드셰이크를 개시합니다. 이 메시지에는 클라이언트가 지원하는 TLS 버전, 지원되는 암호 제품군, 그리고 클라이언트 무작위
라고 하는 무작위 바이트 문자열이 포함된다.TLS(SSL) 인증서
, 서버에서 선택한 암호 제품군, 그리고 서버에서 생성한 또 다른 무작위 바이트 문자열인 서버 무작위
를 포함하는 메시지를 전송한다.검증
합니다. 이를 통해 서버가 인증서에 명시된 서버가 맞는지 확인합니다.예비 마스터 암호
라고 하는 무작위 바이트 문자열을 하나 더 전송합니다. 예비 마스터 암호는 공개 키
로 암호화되어 있으며, 서버가 개인 키
로만 해독할 수 있습니다.예비 마스터 암호
를 해독합니다.클라이언트 무작위
, 서버 무작위
, 예비 마스터 암호
를 이용해 세션 키를 생성합니다. 모두 같은 결과
가 나와야 합니다. 완료
메시지를 전송합니다.완료
메시지를 전송합니다.모든 TLS handshake는 비대칭 암호화(공개 키와 개인 키)를 사용하지만, 세션 키를 생성하는 과정에서 모두가 개인 키를 사용하는 것은 아닙니다. (임시 Diffie-Hellman 핸드셰이크의 경우처럼)