Infra & DevOps/Network

[Network] curl -v๋ฅผ ํ†ตํ•ด SSL ํ•ธ๋“œ์…ฐ์ดํฌ ๊ณผ์ • ํ™•์ธํ•˜๊ธฐ

hyeyeonismm 2024. 10. 31. 16:57
์—…๋ฌด๋ฅผ ํ•˜๋ฉด์„œ ์„œ๋ฒ„๊ฐ€ ์•ˆ๋ถ™์–ด์„œ ์‹œ๊ฐ„์„ ๋‚ ๋ฆฌ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ์•˜๋‹ค ..
์–ธ์  ๊ฐ€ ํ•œ๋ฒˆ์ฏค์€ ๊ผญ ๊ณต๋ถ€ํ•ด์•ผ์ง€ ํ–ˆ๋˜ ๋‚ด์šฉ์ด๋ผ ๊ธฐ์–ตํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์„ฑํ•ด๋ณธ๋‹ค

 

CURL ๋ช…๋ น์–ด๋กœ ์„œ๋ฒ„์™€ ํ†ต์‹ ์„ ํ•  ๋•Œ, -v ์˜ต์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์š”์ฒญ๊ณผ ์‘๋‹ต์˜ ์ „ ๊ณผ์ •์„ ์ƒ์„ธํ•˜๊ฒŒ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
-v ์˜ต์…˜์€ ๋””๋ฒ„๊น… ์˜ต์…˜์œผ๋กœ, ์ด๋ฅผ ํ†ตํ•ด TCP ์—ฐ๊ฒฐ → SSL ํ•ธ๋“œ์…ฐ์ดํฌ → HTTP ์š”์ฒญ/์‘๋‹ต๊นŒ์ง€ ํ†ต์‹ ์˜ ์ „ ๊ณผ์ •์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

์‹ค์ œ๋กœ ํ†ต์‹ ์ด ๋ฌธ์ œ์—†์ด ๋˜๋Š” ์„œ๋ฒ„์˜ ๊ฒฝ์šฐ ์•„๋ž˜์™€ ๊ฐ™์€ CURL ๋ช…๋ น์–ด๋ฅผ ๋‚ ๋ฆฌ๋ฉด ์‘๋‹ต์ด ํ•˜๋‹จ์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ๋œฌ๋‹ค.

curl -v https://google.com

 

๊ทธ๋Ÿฌ๋‚˜ ํ•ญ์ƒ ์ด๋ ‡๊ฒŒ ์„ฑ๊ณต์ ์œผ๋กœ ๋œจ๋Š”๊ฑด ์•„๋‹ˆ๋‹ค...
์•„๋ฌด ip๋กœ ๋‚ ๋ ค๋ดค์„ ๋•Œ๋Š” ์ด๋ ‡๊ฒŒ ์•„๋ž˜์™€ ๊ฐ™์ด ๋œจ๊ธฐ๋„ ํ•˜๊ณ 

์ด๋ ‡๊ฒŒ ๋œจ๊ธฐ๋„ ํ•œ๋‹ค.


๋ญ๊ฐ€ ๋‹ค๋ฅธ๊ฑฐ๊ณ  ๋ญ˜ ์„ค์ •ํ•ด์ค˜์•ผ ์—ฐ๊ฒฐ์ด ๋˜๋Š”๊ฑธ๊นŒ?
์—ฐ๊ฒฐ ๋กœ๊ทธ๋ฅผ ํ•˜๋‚˜ํ•˜๋‚˜ ์‚ดํŽด๋ณด์ž!

1. TCP ์—ฐ๊ฒฐ

* Trying 142.250.207.14:443... *
Connected to google.com (142.250.207.14) port 443

ํด๋ผ์ด์–ธํŠธ(curl)๊ฐ€ google ๋„๋ฉ”์ธ์„ IP๋กœ ๋ณ€ํ™˜ํ•ด์„œ ํ•ด๋‹น ์ฃผ์†Œ์˜ 443 ํฌํŠธ์— ์ ‘์†์„ ์‹œ๋„ํ•œ๋‹ค.
https://๋กœ url์„ ์š”์ฒญํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— 443 ํฌํŠธ๋กœ ์—ฐ๊ฒฐ๋จ
Connected to ~~~๊ฐ€ ๋œจ๋ฉด TCP ์—ฐ๊ฒฐ ์„ฑ๊ณต์ด๋ผ๋Š” ๋œป์ด๋‹ค.

์‹ค์ œ๋กœ google์˜ ip๋ฅผ nslookup์œผ๋กœ ๊ฒ€์ƒ‰ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™์ด ๋‚˜์˜จ๋‹ค.

 

 

2. TLS/SSL ํ•ธ๋“œ์…ฐ์ดํฌ

(1) ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•”ํ˜ธํ™” ๋ฐฉ์‹, ์ง€์› ๋ฒ„์ „, server name ๋“ฑ์„ ํฌํ•จํ•œ Hello ๋ฉ”์‹œ์ง€๋ฅผ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค.
(2) ์„œ๋ฒ„๋„ ์‘๋‹ตํ•˜๋ฉฐ ์ธ์ฆ์„œ๋ฅผ ์ „์†กํ•˜๊ณ  ํ‚ค๋ฅผ ๊ตํ™˜ํ•œ๋‹ค.
(3) ์„ธ์…˜ ํ‚ค ๊ตํ™˜์ด ์™„๋ฃŒ๋˜๊ณ , ์•”ํ˜ธํ™” ํ†ต์‹ ์ด ์‹œ์ž‘ ๊ฐ€๋Šฅํ•œ ์ƒํƒœ๊ฐ€ ๋œ๋‹ค.

์—ฌ๊ธฐ์„œ OUT์€ ํด๋ผ์ด์–ธํŠธ -> ๊ตฌ๊ธ€ ์„œ๋ฒ„์ด๊ณ  IN์€ ๊ตฌ๊ธ€ ์„œ๋ฒ„ -> ๋‚ด ์ปดํ“จํ„ฐ์˜ curl๋กœ ๋“ค์–ด์˜ค๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋งํ•œ๋‹ค.


handshake Finished๊ฐ€ ๋œจ๋ฉด, ์„œ๋ฒ„ ์ธ์ฆ์„œ ๊ฒ€์ฆ ๊ฒฐ๊ณผ๊ฐ€ ๋‚˜์˜จ๋‹ค.
์—ฌ๊ธฐ์„œ issue์€ ์ด ์ธ์ฆ์„œ๋ฅผ ๋ˆ„๊ฐ€ ๋ฐœ๊ธ‰ํ–ˆ๋Š”๊ฐ€๋ฅผ ๋‚˜ํƒ€๋‚ด๊ณ , ์•„๋ž˜์˜ ์ถœ๋ ฅ ๊ฒฐ๊ณผ๋Š” ์ธ์ฆ์„œ๊ฐ€ Google ์ž์ฒด CA์— ์˜ํ•ด ๋ฐœ๊ธ‰๋˜์—ˆ์Œ์„ ๋œปํ•œ๋‹ค.

* Server certificate:
* subject: CN=google.com
* start date: ...
* issuer: C=US; O=Google Trust Services
* SSL certificate verify ok.

 

 

3. HTTP ์š”์ฒญ/์‘๋‹ต

> GET / HTTP/1.1
> Host: google.com
> User-Agent: curl/8.4.0
> Accept: */*

ํด๋ผ์ด์–ธํŠธ๊ฐ€ / ๊ฒฝ๋กœ๋กœ GET ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ 

< HTTP/1.1 301 Moved Permanently
< Location: https://www.google.com/

์„œ๋ฒ„๊ฐ€ ์‘๋‹ตํ•œ๋‹ค. https://google.com์ด์—ˆ๋˜๋˜ ์š”์ฒญ์„ https://www.google.com์œผ๋กœ๋กœ ๋ฆฌ๋””๋ ‰์…˜ํ•ด์ค€๋‹ค.
๋ธŒ๋ผ์šฐ์ €์˜€๋‹ค๋ฉด ์ž๋™์œผ๋กœ ๋ฆฌ๋””๋ ‰์…˜ ๋๊ฒ ์ง€๋งŒ curl์€ ์ˆ˜๋™์ด๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ๊ธฐ๊นŒ์ง€ ์ถœ๋ ฅ๋˜๊ณ  ์ข…๋ฃŒ๋œ๋‹ค.

* Connection #0 to host google.com left intact

์ปค๋„ฅ์…˜์„ ๋Š์ง€ ์•Š๊ณ  keep-alive ์ƒํƒœ๋กœ ์œ ์ง€ํ•œ๋‹ค๋Š” ๋œป ..

 

4. ๋‹ค์‹œ๋ณด๋Š” ์‹คํŒจ ์›์ธ

์•„๊นŒ ๋ฌด์ž‘์œ„๋กœ ip ์ž…๋ ฅํ•ด์„œ ์—ฐ๊ฒฐํ•œ ๊ฑธ ๋‹ค์‹œ ๋ด๋ณด์ž!
Connection timed out์ด ๋–ด๊ธฐ ๋•Œ๋ฌธ์— TCP ์—ฐ๊ฒฐ ์ž์ฒด๊ฐ€ ๋˜์ง€ ์•Š์•˜๋‹ค๋Š” ๋œป์ด๋‹ค.

TCP ์—ฐ๊ฒฐ์ด ์•ˆ๋˜๋Š” ์ด์œ ๋Š”... ์„œ๋ฒ„๊ฐ€ ๊บผ์ ธ์žˆ๊ฑฐ๋‚˜, ๋ฐฉํ™”๋ฒฝ์ด ๋ง‰ํ˜€์žˆ๊ฑฐ๋‚˜, NAT ๋ผ์šฐํŒ… ๋ฌธ์ œ๊ฑฐ๋‚˜ ๋“ฑ๋“ฑ ๋‹ค์–‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ดํ›„์˜ ๋‹จ๊ณ„๋Š” ๋˜ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค.

๋‘ ๋ฒˆ์งธ curl ์‹œ๋„๋Š” TCP ์—ฐ๊ฒฐ์€ ์„ฑ๊ณตํ–ˆ์ง€๋งŒ HTTP ์š”์ฒญ์—์„œ ์‹คํŒจ๊ฐ€ ๋˜์—ˆ๋‹ค.
HTTP ์š”์ฒญ์„ ๋ณด๋ƒˆ์ง€๋งŒ ์„œ๋ฒ„๊ฐ€ ์‘๋‹ต์„ ๋ณด๋‚ด์ง€ ์•Š์•„์„œ Empty reply from server๊ฐ€ ๋œฌ ๊ฒƒ์ด๋‹ค.
ํฌํŠธ ํฌ์›Œ๋”ฉ์ด ์•ˆ๋๊ฑฐ๋‚˜.. ๋ฐฑ์—”๋“œ๊ฐ€ ์—ฐ๊ฒฐ๋˜์–ด์žˆ์ง€ ์•Š๋‹ค๊ฑฐ๋‚˜.. ์ด๊ฑฐ ์—ญ์‹œ ์ดํ›„์˜ ๋‹จ๊ณ„๋Š” ๋˜ ์ฐพ์•„๋ด์•ผ ํ•œ๋‹ค ใ…Ž

 

์ด๋ฒˆ ๊ธฐํšŒ์— ๊ทธ๋™์•ˆ ๋„˜๊ฒจ์งš๋˜ ์—ฐ๊ฒฐ ํ๋ฆ„์„ ๊ณต๋ถ€ํ•ด๋ณผ ์ˆ˜ ์žˆ์—ˆ๋‹ค.
๊ทธ๋Ÿฌ๋‚˜... ์•„์ง๋„ ๋„ˆ๋ฌด ๊ธฐ๋ณธ์ ์ธ ๋„คํŠธ์›Œํฌ ์ง€์‹์ด ๋ถ€์กฑํ•˜๋‹ค๊ณ  ์ƒ๊ฐ๋˜์–ด์„œ SSL/TLS ํ•ธ๋“œ์…ฐ์ดํฌ ๊ตฌ์กฐ๋‚˜ ํ‚ค ๊ตํ™˜ ๋ฐฉ์‹, TCP ํ†ต์‹  ๊ณ„์ธต ๋“ฑ๋“ฑ.. ๋” ๊ณต๋ถ€ํ•ด๋ด์•ผ๊ฒ ๋‹ค. ๋ถ„๋ช… ํ•™๊ต๋‹ค๋‹๋•Œ ๋‹ค ๋ฐฐ์šด๊ฑด๋ฐ....ใ…Ž