Quick Flow
TCP connection
-> ClientHello / ServerHello: version·cipher·key share 협상
-> certificate + signature: server identity 검증
-> shared secret에서 traffic keys 파생
-> Finished 검증
-> encrypted HTTP records인증서는 server public key와 domain identity를 신뢰 사슬에 연결합니다. 인증서 자체가 session data를 계속 암호화하는 것이 아니라 handshake의 인증과 key agreement 뒤에 만든 대칭 traffic key가 실제 데이터를 보호합니다.
검증 경계
Client는 certificate chain의 signature, 신뢰할 root, 유효 기간, 요청 hostname과 사용 목적을 확인합니다. 인증서가 유효해도 application authorization이 자동으로 끝나는 것은 아닙니다. TLS는 연결 상대와 전송 경로를 보호하고 로그인·권한 규칙은 application이 따로 결정합니다.
TLS 1.3의 일반적인 certificate 기반 full handshake는 ephemeral (EC)DHE로 forward secrecy를 제공합니다. Resumption에서 PSK와 (EC)DHE를 함께 쓰면 새 key exchange의 forward secrecy를 유지하지만 PSK-only mode는 해당 성질이 없습니다. 0-RTT data는 forward secrecy와 replay 보호가 제한되므로 멱등한 작업으로 제한해야 합니다.
자주 틀리는 점
- HTTPS가 server 내부 저장 데이터까지 자동 암호화한다고 생각하지 않습니다.
- 자체 서명 인증서를 무조건 위조로 보지 않지만, client가 별도로 신뢰하도록 배포하지 않았다면 공개 서비스 검증은 실패합니다.
- 인증서 경고를 끄거나 모든 hostname을 허용해 문제를 우회하지 않습니다.
- TLS handshake와 TCP handshake를 같은 단계로 보지 않습니다.
참고 링크
2 sources