[NET-005][기초] HTTP 요청을 TLS로 안전하게 보호하는 HTTPS > IT 기술 공유

본문 바로가기
사이트 내 전체검색

IT 기술 공유

[NET-005][기초] HTTP 요청을 TLS로 안전하게 보호하는 HTTPS

페이지 정보

profile_image
작성자 기술팀장
댓글 0건 조회 252회 작성일 26-09-01 04:36

본문

[이번 수업]

웹 주소의 http와 https가 무엇을 뜻하는지, HTTPS가 TLS로 통신을 어떻게 보호하는지 배웁니다. 마지막에는 본인이 운영하는 nalcoding.com에 읽기 전용 요청을 보내 HTTP 버전, 상태 코드, 인증서 검증 결과를 확인합니다.

[선수지식]

NET-001~004에서 배운 IP 주소, DNS, 포트, TCP·UDP 개념을 알고 있으면 좋습니다. 터미널에서 명령 한 줄을 실행할 수 있으면 충분합니다.

[학습목표]

1. HTTP 요청과 응답의 기본 구조를 설명한다.
2. HTTPS와 TLS의 관계를 구분한다.
3. 서버 인증서 검증 결과를 안전하게 확인한다.

[핵심개념]

HTTP(Hypertext Transfer Protocol)는 클라이언트와 서버가 웹 자원을 주고받는 응용 계층 규칙입니다. 요청에는 메서드, 대상, 헤더, 선택적인 본문이 있고 응답에는 상태 코드, 헤더, 선택적인 본문이 있습니다. HTTP 자체는 각 요청을 독립적으로 다루는 무상태 프로토콜입니다.

HTTPS는 완전히 다른 내용 규칙이 아니라 TLS로 보호된 연결에서 사용하는 HTTP입니다. TLS(Transport Layer Security)는 통신 상대를 확인하고, 내용을 암호화해 엿보기를 어렵게 하며, 전송 중 변경을 탐지하는 보안 통신 규칙입니다. TLS 1.3의 핸드셰이크는 사용할 보안 매개변수를 합의하고 서버를 인증하며 공통 키를 만듭니다. 이후 레코드 계층이 실제 HTTP 데이터를 보호합니다.

서버 인증서는 공개 키와 도메인 이름을 연결한 전자 증명서입니다. 브라우저나 curl은 접속한 호스트 이름이 인증서의 이름과 맞는지, 유효기간 안인지, 신뢰하는 인증기관까지 인증 경로가 이어지는지 검사합니다. 검증 성공은 그 서버와 보호된 연결을 만들었다는 뜻이지, 페이지의 모든 내용이나 운영 주체가 무조건 안전하다는 보증은 아닙니다.

[따라하기]

macOS·Linux 터미널에서는 아래 명령을 그대로 실행합니다. Windows PowerShell에서는 curl 대신 curl.exe라고 입력하세요. 이 실습은 본인 소유 사이트에 GET 요청 한 번만 보내고 응답 본문은 저장하지 않습니다.

```sh
curl --silent --show-error --output /dev/null --write-out 'http_version=%{http_version}\nstatus=%{http_code}\nssl_verify=%{ssl_verify_result}\n' https://nalcoding.com/
```

예상 결과 예시는 다음과 같습니다. 환경과 서버 협상에 따라 http_version은 1.1, 2, 3 중 하나가 될 수 있습니다. status=200은 요청 성공, ssl_verify=0은 인증서 검증 성공입니다.

```text
http_version=2
status=200
ssl_verify=0
```

주소를 http://nalcoding.com/으로 바꾸면 서버가 HTTPS 주소로 이동시키는 3xx 상태를 보낼 수 있습니다. 리디렉션은 서버 설정에 따라 다르므로 결과가 달라도 오류라고 단정하지 마세요.

[흔한 실수]

- HTTPS가 있으면 애플리케이션의 로그인·권한 검사와 입력 검증도 자동으로 해결된다고 생각합니다. TLS는 전송 구간을 보호할 뿐입니다.
- 인증서 오류를 없애려고 -k 또는 --insecure를 사용합니다. 이 옵션은 호스트 이름과 인증기관 검증을 건너뛰므로 정상 해결책이 아닙니다.
- 200 상태만 보고 암호화 성공까지 확인했다고 생각합니다. 상태 코드와 인증서 검증 결과는 서로 다른 정보입니다.

[보안 주의]

비밀번호, 세션 쿠키, API 토큰은 평문 HTTP로 보내지 마세요. 인증서 오류가 나면 시스템 시간, 접속 호스트 이름, 인증서 유효기간과 신뢰 경로부터 확인합니다. verbose 옵션의 출력에는 Authorization·Cookie 같은 민감한 헤더가 섞일 수 있으므로 공유하기 전에 반드시 지우세요. 실습은 본인 소유 또는 명시적으로 허가받은 시스템에서 읽기 전용으로만 수행하고, TLS 라이브러리와 인증서는 지원되는 버전으로 갱신합니다.

[직접 해볼 과제]

1. 위 명령의 결과 세 줄을 기록하고 각 값의 의미를 한 문장씩 설명하세요.
2. 본인이 소유한 로컬 개발 서버나 허가받은 사이트 한 곳에서도 같은 명령을 실행해 nalcoding.com 결과와 비교하세요. 인증서 오류가 나면 우회하지 말고 원인만 기록합니다.

[확인문제]

1. HTTPS는 HTTP와 어떤 관계이며 TLS는 무엇을 보호하나요?
2. 인증서 검증 때 확인하는 세 가지 항목은 무엇인가요?
3. curl의 ssl_verify=0과 HTTP status=200은 각각 무엇을 뜻하나요?

[다음 학습]

NET-006에서는 라우터와 NAT가 사설 IP 주소의 기기를 공인 인터넷과 연결하는 방식을 배웁니다.

[공식 참고 자료]

- RFC 9110 HTTP Semantics: https://www.rfc-editor.org/rfc/rfc9110.html
- RFC 8446 TLS 1.3: https://www.rfc-editor.org/rfc/rfc8446.html
- RFC 5280 인증서 경로 검증: https://www.rfc-editor.org/rfc/rfc5280.html
- curl 공식 매뉴얼: https://curl.se/docs/manpage.html

댓글목록

등록된 댓글이 없습니다.

회원로그인

회원가입

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

접속자집계

오늘
5,092
어제
6,862
최대
16,772
전체
771,043
Copyright © 소유하신 도메인. All rights reserved.