PKI를 통해 전자서명과 전자봉투를 생성하고 생성된 전자봉투를 더 안정적으로 전송하기위해서 사용하는 SSL/TLS를 좀 더 깊게 공부하려한다 ! 웹에서 HTTPS를 사용한다는 것은 단순히 주소창에 https://를 붙이는 것을 넘어, 보안을 보장하기 위한 SSL/TLS 프로토콜을 활용한 암호화 과정을 의미한다. 이 포스팅에서는 HTTP에서 HTTPS로의 변환 과정과 SSL/TLS 핸드셰이크 과정을 포함해 HTTPS가 어떻게 데이터를 보호하는지 알아보겠다 !
1. HTTPS란?
HTTPS는 HTTP에 SSL/TLS 보안 계층을 추가하여 암호화된 안전한 통신을 가능하게 하는 프로토콜이다. HTTPS는 주로 웹사이트에서 개인정보 보호를 위해 사용된다. 예를 들어, HTTPS는 데이터 전송 중 도청, 변조를 방지하여 사용자 정보가 안전하게 보호된다.
HTTP vs HTTPS
- HTTP는 데이터가 평문으로 전송되기 때문에 도청 위험이 있다.
- HTTPS는 SSL/TLS 암호화를 사용해 데이터 전송을 보호하며, 이를 위해 핸드셰이크 과정을 통해 클라이언트와 서버 간 암호화 키를 교환한다.
2. HTTPS 전환의 핵심: SSL/TLS 핸드셰이크
HTTPS 통신에서 핸드셰이크(Handshake) 과정이 초기 연결의 핵심이다. 핸드셰이크 과정은 클라이언트와 서버가 암호화 방식과 키를 협상하고 안전한 통신을 설정하기 위한 단계이다. 각 단계에서 클라이언트와 서버는 특정 데이터를 교환하고, 대칭 키를 생성하여 이후 통신에서 사용할 준비를 한다.
핸드셰이크 과정 요약
핸드셰이크는 크게 다음 단계로 나뉜다:
- ClientHello: 클라이언트가 지원하는 암호화 방식, TLS 버전, 클라이언트 난수 전송
- ServerHello: 서버가 선택한 암호화 방식, 서버 난수 전송
- 서버 인증서 전송: 서버는 자신의 공개 키를 포함한 인증서를 클라이언트에 전송
- 프리마스터 시크릿 전송: 클라이언트가 생성한 프리마스터 시크릿을 서버 공개 키로 암호화해 전송
- 대칭 키 생성: 클라이언트와 서버는 클라이언트 난수, 서버 난수, 프리마스터 시크릿을 조합해 대칭 키 생성
- 암호화 통신 시작: 이후 데이터는 이 대칭 키를 사용해 암호화하여 통신
3. 단계별 HTTPS 핸드셰이크 과정 자세히 살펴보기
밑의 그림은 SSL/TLS의 전체적인 동작흐름과 CA가 인증서를 서명하는 과정까지를 내가 직접 그려보았다 ! 참고 해서 밑의 정리된 글을 읽으면 더 이해가 조금이라도 잘 되지않을까.. 싶다 ..

3.1. ClientHello 메시지 전송
- 클라이언트는 서버에 ClientHello 메시지를 전송한다.
- 이 메시지에는 클라이언트가 지원하는 암호화 방식 목록, TLS 버전, 그리고 클라이언트 난수가 포함된다.
3.2. ServerHello 메시지 전송
- 서버는 클라이언트의 요청을 수신한 후 클라이언트의 암호화 방식 목록 중 하나를 선택하여 암호화 방식을 결정한다.
- 서버 난수를 생성하여 ServerHello 메시지로 클라이언트에게 응답한다.
3.3. 서버의 인증서 전송
- 서버는 인증서(Certificate)를 클라이언트에게 전송한다.
- 인증서에는 서버의 공개 키와 서버의 신원 정보를 포함하고 있으며, 인증 기관(CA)이 서명하여 신뢰성을 보장한다.
3.4. 클라이언트의 프리마스터 시크릿 전송
- 클라이언트는 서버의 공개 키를 사용해 프리마스터 시크릿(Premaster Secret)을 생성한 후, 이를 서버의 공개키로 암호화하여 서버로 전송한다.
- 서버는 자신의 개인 키로 이 프리마스터 시크릿을 복호화하여 원래 값을 얻는다.
3.5. 대칭 키 생성
- 클라이언트 난수, 서버 난수, 프리마스터 시크릿을 조합하여 클라이언트와 서버 모두 같은 대칭 키(세션 키)를 생성한다.
- 이 대칭 키는 이후의 통신 데이터를 암호화하는 데 사용된다.
3.6. 암호화된 데이터 전송
핸드셰이크가 완료되면 클라이언트와 서버는 이제 대칭 키로 데이터를 암호화하여 안전하게 통신을 시작할 수 있다.
4. 세션 재사용으로 핸드셰이크 간소화하기
핸드셰이크 과정은 많은 연산을 필요로 하므로, 세션 ID 또는 세션 티켓을 통해 세션 재사용을 지원하여 이후 요청에서 핸드셰이크 과정을 생략할 수 있다.
세션 ID 방식
세션 ID는 서버와 클라이언트 간의 연결을 유지하고, 동일한 세션을 재사용할 수 있게 하기 위해 사용되는 고유한 식별자이다. 세션 ID 방식은 다음과 같은 방식으로 작동한다.
- 세션 생성: 클라이언트가 처음 서버에 연결할 때, 서버는 세션 ID를 생성하여 클라이언트에게 제공한다. 이 세션 ID는 쿠키에 저장되어 클라이언트의 브라우저에 남아 있게 된다 !
- 세션 정보 저장: 서버는 생성한 대칭키와 관련된 암호화 매개변수 등의 세션 정보를 서버 내부의 데이터베이스 또는 메모리에 저장한다. 이때, 세션 정보에는 이 연결에 사용된 대칭키가 포함되며, 이 데이터를 참조할 수 있는 위치(주소)가 세션 ID에 쌓이게 된다.
- 세션 재사용 요청: 클라이언트가 다시 서버에 연결할 때, 쿠키에 저장된 세션 ID를 서버에 전송한다. 서버는 이 세션 ID를 사용해 데이터베이스나 메모리에서 해당 세션 정보를 조회한다.
- 대칭키 복원: 세션 ID에 쌓여있는 메모리나, 데이터베이스 주소를 통해 서버는 기존 세션에 사용되었던 대칭키와 관련된 정보를 복원한다. 이로 인해 서버와 클라이언트 간의 핸드셰이크 과정을 생략하고, 이전 세션에서 사용된 대칭키를 그대로 재사용할 수 있다.
- 빠른 연결 설정: 이렇게 복원된 대칭키를 이용해 서버와 클라이언트는 빠르게 데이터를 암호화하여 통신할 수 있다. 즉, 모든 복잡한 핸드셰이크 과정을 다시 수행하지 않고도 암호화된 상태로 데이터 전송이 가능해지는것이다 ! ! !
세션 ID 방식의 핵심은 세션 ID가 단순히 세션 정보를 저장하고 있는 위치를 가리키는 역할을 한다는 점이다. 실제 대칭키와 기타 세션 관련 정보는 서버 쪽에 저장되며, 세션 ID는 이를 참조할 수 있는 인덱스 역할을 한다 ! !
세션 티켓 방식
세션 티켓 방식은 세션 정보를 서버에 저장하지 않고, 클라이언트 측에 전달하여 다음 연결 시 재사용하는 방식이다. 이는 세션 ID 방식과 다르게 서버의 메모리를 절약하고, 서버에 대한 부담을 줄이는 장점이 있다. 세션 티켓 방식은 다음과 같은 방식으로 작동한다.
- 세션 티켓 생성: 처음 서버와 클라이언트가 연결을 맺을 때, 서버는 연결에 사용된 대칭키와 암호화 매개변수 등의 정보를 담은 세션 티켓을 생성한다. 이 세션 티켓은 서버가 보유한 대칭키를 사용하여 암호화되기 때문에, 클라이언트는 이 티켓의 내용을 알 수 없다.
- 세션 티켓 전달: 서버는 이 암호화된 세션 티켓을 클라이언트에게 전달한다. 클라이언트는 이 세션 티켓을 쿠키나 로컬 스토리지에 저장하여 이후 서버와의 연결에 사용할 수 있게 한다.
- 세션 티켓 재사용: 클라이언트가 서버와 다시 연결을 맺을 때, 이전에 받은 세션 티켓을 서버에 다시 전송한다. 서버는 자신의 대칭키를 사용해 이 세션 티켓을 복호화하고, 이전에 사용된 대칭키와 암호화 매개변수를 복원한다.
- 빠른 연결 설정: 이렇게 복원된 대칭키를 이용해 서버와 클라이언트는 핸드셰이크 과정 없이 빠르게 연결을 설정하고, 대칭키로 데이터를 암호화하여 통신할 수 있다.
세션 티켓 방식의 핵심은 세션 정보를 클라이언트 측에 저장하여 서버의 메모리 부담을 줄이는 것이다. 서버는 단지 세션 티켓을 복호화하여 정보를 복원하는 역할을 하며, 이를 통해 세션을 재사용할 수 있게 된다 !
세션 ID / 세션 티켓
- 세션 ID 방식은 세션 정보가 서버에 저장되고, 클라이언트는 세션을 식별하기 위한 세션 ID만을 보유한다. 서버는 해당 세션 정보를 기반으로 대칭키를 복원하여 재사용한다.
- 세션 티켓 방식은 세션 정보가 클라이언트 측에 저장된다. 서버는 클라이언트가 제공한 세션 티켓을 복호화하여 필요한 정보를 복원하고 세션을 재사용한다.
하지만 ?! 주로 세션 아이디만을 사용하는거같긴하다 !
HTTPS는 SSL/TLS 프로토콜을 사용하여 HTTP 요청을 암호화된 상태로 전송함으로써 웹의 보안을 강화한다. HTTPS 전환 과정은 핸드셰이크를 통해 이루어지며, 세션 재사용 기능을 통해 성능을 최적화한다. 공개 키와 개인 키 쌍은 보안을 강화하는 핵심이며, HTTPS는 이 과정을 통해 클라이언트와 서버 간 안전한 데이터 전송을 보장할수있다 !!