Q.HTTPS의 동작 원리를 설명해주세요.
HTTP 를 TLS 위에 올려 암호화와 신원 확인을 더한 것입니다.
| 단계 | 하는 일 |
|---|
| 1 | 서버 인증서를 받아 신뢰할 수 있는 기관이 발급했는지, 도메인이 맞는지, 만료되지 않았는지 확인한다 |
| 2 | 비대칭 연산으로 양쪽이 같은 대칭키를 안전하게 만든다 |
| 3 | 그 대칭키로 이후 데이터를 암호화한다 |
이 구조가 주는 것은 셋입니다.
| 성질 | 내용 |
|---|
| 기밀성 | 중간에서 내용을 읽을 수 없다 |
| 무결성 | 중간에서 바꾸면 검증에 실패한다 |
| 인증 | 상대가 그 도메인의 주인인지 확인한다 |
세 번째가 없으면 암호화는 무의미합니다. 공격자와 안전하게 통신하는 셈이기 때문입니다.
흔한 실수: 암호화만 설명하고 인증을 빼는 것. HTTPS 가 뚫리는 실제 사례는 대부분 인증 단계(인증서 검증 무시, 루트 인증서 설치, 첫 접속이 평문)에서 생깁니다.
Q.HTTP와 HTTPS 차이를 설명해주세요
전송 구간에 TLS 가 있는지가 다릅니다.
| 항목 | HTTP | HTTPS |
|---|
| 암호화 | 없다. 평문 | 있다 |
| 신원 확인 | 없다 | 인증서로 확인 |
| 기본 포트 | 80 | 443 |
| 연결 비용 | 없음 | 핸드셰이크 왕복이 추가된다 |
| 검색과 브라우저 | 경고 표시, 순위 불이익 | 기본 요구사항 |
평문이면 같은 네트워크에 있는 누구나 내용을 볼 수 있고, 중간에서 바꿔치기도 됩니다. 공용 와이파이에서 로그인 정보가 새는 것이 이 경우입니다.
성능 걱정은 지금은 거의 근거가 없습니다. TLS 1.3 은 1왕복이고 세션 재사용으로 0왕복도 가능하며, 암복호는 하드웨어 가속을 받습니다. HTTP/2 와 HTTP/3 는 사실상 HTTPS 에서만 쓰여 오히려 더 빠릅니다.
흔한 실수: HTTPS 를 "비밀번호 페이지만" 적용하는 것. 다른 페이지의 쿠키가 평문으로 오가면 세션이 탈취됩니다. 전 구간 적용과 HSTS 가 기본입니다.
Q.TLS 핸드셰이크 과정을 설명해주세요.
| 단계 | 방향 | 내용 |
|---|
| 1 | 클라이언트에서 서버로 | 지원하는 암호 목록과 무작위 값을 보낸다 |
| 2 | 서버에서 클라이언트로 | 쓸 암호를 고르고 인증서와 무작위 값을 보낸다 |
| 3 | 클라이언트 | 인증서를 검증한다. 발급 기관, 도메인, 만료, 폐기 여부 |
| 4 | 양쪽 | 키 교환 값을 주고받아 같은 대칭키를 각자 계산한다 |
| 5 | 양쪽 | 지금까지의 대화가 조작되지 않았는지 확인하고 암호화 통신을 시작한다 |
TLS 1.2 는 2왕복, TLS 1.3 은 1왕복입니다. 1.3 에서 줄어든 이유는 선택지를 줄여 클라이언트가 첫 메시지에 키 교환 값을 미리 실어 보낼 수 있게 했기 때문입니다.
4단계에서 매 연결마다 임시 키를 만드는 방식이 표준입니다. 서버 개인키가 나중에 유출돼도 과거 통신은 복호화되지 않습니다.
흔한 실수: 서버 공개키로 대칭키를 암호화해 보낸다고만 설명하는 것. 그 방식은 과거 통신 보호가 안 되어 TLS 1.3 에서 제거됐습니다.
Q.대칭키와 비대칭키 암호화의 차이는?
| 항목 | 대칭키 | 비대칭키 |
|---|
| 키 | 하나를 공유 | 공개키와 개인키 한 쌍 |
| 속도 | 빠르다 | 수백에서 수천 배 느리다 |
| 키 전달 문제 | 있다. 안전하게 줄 방법이 필요 | 없다. 공개키는 공개해도 된다 |
| 용도 | 대량 데이터 암호화 | 키 교환, 전자 서명 |
| 예 | AES, ChaCha20 | RSA, 타원곡선 |
비대칭키가 푼 문제는 처음 만난 상대와 사전 공유 없이 공통 비밀을 만드는 것입니다. 그 문제만 풀고 바로 대칭키로 넘깁니다.
전자 서명은 방향이 반대입니다. 개인키로 서명하고 공개키로 검증하므로 "이 사람이 보냈다"를 증명합니다. 인증서가 이 원리로 동작합니다.
흔한 실수: 비대칭키가 더 안전하다고 답하는 것. 같은 보안 강도 기준으로는 대칭키가 훨씬 짧은 키로 같은 강도를 냅니다. 안전성 차이가 아니라 역할 분담입니다.
Q.인증서(CA)의 역할은 무엇인가요?
이 공개키가 이 도메인의 것임을 제3자가 보증하는 것입니다.
인증서에 담긴 것
도메인 이름
공개키
발급 기관과 유효 기간
발급 기관의 서명
브라우저는 발급 기관의 공개키로 서명을 검증합니다. 그 기관의 인증서도 상위 기관이 서명했고, 이 사슬을 따라 올라가면 브라우저나 운영체제에 미리 설치된 루트 인증서에 닿습니다.
인증 기관이 없으면 공개키를 받아도 그것이 진짜 그 서버의 것인지 알 수 없습니다. 중간에서 자기 공개키로 바꿔치기하면 그대로 통합니다.
| 검증 항목 | 실패하면 |
|---|
| 서명 사슬 | 신뢰할 수 없는 발급자 경고 |
| 도메인 일치 | 도메인 불일치 경고 |
| 유효 기간 | 만료 경고 |
| 폐기 여부 | 폐기된 인증서 경고 |
흔한 실수: 인증서가 암호화를 한다고 답하는 것. 암호화는 대칭키가 하고, 인증서는 신원 보증과 공개키 전달을 합니다.
Q.HTTP/1.1 vs HTTP/2 주요 차이점은?
연결을 어떻게 쓰는지가 다릅니다.
| 항목 | HTTP/1.1 | HTTP/2 |
|---|
| 요청 처리 | 한 연결에서 하나씩 순서대로 | 한 연결에 여러 스트림을 동시에 |
| 앞 막힘 | 응용 계층에서 발생 | 응용 계층에서는 해결 |
| 헤더 | 매번 전체 전송 | 압축하고 이전과 겹치는 부분을 생략 |
| 서버 푸시 | 없음 | 있었으나 실효가 적어 사실상 폐기 |
| 연결 수 | 도메인당 6개 안팎을 열어 우회 | 하나로 충분 |
HTTP/1.1 에서 병렬을 얻으려고 도메인을 쪼개 연결 수를 늘리는 기법을 썼는데, HTTP/2 에서는 오히려 역효과입니다.
다만 HTTP/2 에도 남는 문제가 있습니다. TCP 계층에서 패킷이 유실되면 무관한 스트림까지 기다립니다. 이것을 없애려고 HTTP/3 가 UDP 기반 QUIC 으로 갔습니다.
흔한 실수: HTTP/2 가 앞 막힘을 완전히 없앴다고 답하는 것. 응용 계층에서는 해결했지만 전송 계층에서는 남습니다.
먼저 스스로 답해보고 아래 답변과 견줘보세요. 막히는 부분은 문제로 확인할 수 있어요.
읽었으면 문제로 확인해보세요
네트워크 문제를 풀면 틀린 문제가 자동으로 노트에 쌓입니다. 가입 없이 5문제를 먼저 풀어볼 수도 있어요.