TLS 핸드셰이크

TLS handshake

클라이언트와 서버가 암호화 방식과 공유 비밀을 합의해 안전한 채널을 엽니다.

···
html
<div class="n-demo"><div class="n-head"><strong>TLS HANDSHAKE</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="tls-side n-box">CLIENT</div><div class="tls-wire"><div id="tls-msg" class="n-box mono">ClientHello →</div><div id="tls-lock" class="tls-lock">OPEN CHANNEL</div></div><div class="tls-side n-box">SERVER</div></div><div class="n-foot">tap to step · auto replay</div></div>
css
.n-demo{width:min(94vw,760px);height:min(88vh,324px);padding:clamp(9px,2.2vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(5px,1.3vmin,10px);font:600 clamp(12px,2.4vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;overflow:hidden}.n-head,.n-foot{display:flex;justify-content:space-between;align-items:center;color:var(--muted)}.n-head strong{color:var(--accent)}.n-head span,.n-foot{font-size:12px}.n-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;gap:clamp(4px,1vmin,10px)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.n-box{padding:clamp(5px,1.5vmin,11px);border:1px solid var(--line);border-radius:8px;background:var(--bg);text-align:center}.n-on{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.n-muted{color:var(--muted)}@media(max-width:400px){.n-head span{display:none}}.tls-side{width:24%}.tls-wire{width:48%;display:grid;gap:10px}.tls-lock{border:2px dashed var(--line);border-radius:20px;text-align:center;padding:7px;color:var(--muted)}.tls-lock.n-on{border-style:solid}
js
const tlsMessages=['ClientHello →','← ServerHello + cert','derive traffic keys','secure data'];let step=2;function advance(){document.getElementById('tls-msg').textContent=tlsMessages[step];document.getElementById('tls-lock').classList.toggle('n-on',step===3);document.getElementById('tls-lock').textContent=step===3?'PROTECTED CHANNEL':'OPEN CHANNEL';step=(step+1)%4}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}

TLS 핸드셰이크에서 클라이언트는 지원하는 방식과 키 교환 정보를 보내고 서버는 인증서와 자신의 키 교환 정보를 돌려줍니다. 양쪽은 교환 결과에서 같은 세션 키를 도출합니다.

데모는 평문 설정 교환 뒤 자물쇠 상태가 켜지고 애플리케이션 데이터가 보호되는 흐름입니다. 인증서 검증에 실패하면 안전한 연결로 넘어가면 안 됩니다.

언제 쓰나

HTTPS 연결 오류나 핸드셰이크 지연을 분석할 때 인증서 검증과 키 교환 단계를 구분합니다.

페이지로 열기 ↗