1. TLS 1.2
โ DNS๋ฅผ ํตํ์ฌ URL์ผ๋ก IP ํ์ธ
โก TCP Handshaking(1 Round Trip Time)
- 3 Way Hanshaking
https://eunhyee.tistory.com/96?category=937476
โข TLS Handshaking(2 Round Trip Time)
Client Hello : ํด๋ผ์ด์ธํธ์ธก์์ ์์ฑํ ๋๋ค ๋ฐ์ดํฐ, ํด๋ผ์ด์ธํธ๊ฐ ์ง์ํ๋ ์ํธํ ๋ฐฉ์๋ค(chipher suites), ์ธ์ ID ๋ฑ ํฌํจํ ํจํท์ Client -> Server๋ก ์ ์กํ๋ค.
Sever Hello : ์๋ฒ์ธก์์ ์์ฑํ ๋๋ค ๋ฐ์ดํฐ, ์๋ฒ๊ฐ ์ ํํ ํด๋ผ์ด์ธํธ์ ์ํธํ ๋ฐฉ์(chipher suites) ๋ฑ ํฌํจํ ํจํท์ Server -> Client๋ก ์ ์กํ๋ค.
- ์ธ์ ID๋ฅผ ํตํด ์ฌ์ฐ๊ฒฐ ์ธ์ ์ธ์ง ์ ๊ท ์ธ์ ์ธ์ง๋ ํ์ธํ๋ค.
Certificate : SSL ์ธ์ฆ์(์ ํ๋ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ CA ๋น๊ณต๊ฐํค๋ก ์ํธํ, ๋ธ๋ผ์ฐ์ ์ CA ๊ณต๊ฐํค๋ก ๋ณตํธํํ ๊ฒฝ์ฐ ์ ์ ์๋ช )๋ฅผ ์ธ์ ํค๋ก ์ํธํํ ํจํท์ Server -> Client๋ก ์ ์กํ๋ค.
Server Key Exchange/Server Hello Done : ์๋ฒ ๊ณต๊ฐํค ํฌํจํ ํจํท์ Server -> Client๋ก ์ ์กํ๋ค. (์๋ฒ ๊ณต๊ฐํค๋ Ceritificate์ ํฌํจ๋๊ธฐ๋ ํ๊ณ ํฌํจ๋์ง ์์ ์๋ ์์)
Client Key Exchange/Change Cipher Spec/Encryted Handshake Message : ํด๋ผ์ด์ธํธ ๊ณต๊ฐํค๋ฅผ ํฌํจํ ํจํท์ Client -> Server๋ก ์ ์กํ๋ค. ์ฌ๊ธฐ์๋ ์ด๋ค ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋๋์ ๋ฐ๋ผ์ ์ธ์ ํค๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด ์กฐ๊ธ ๋ค๋ฆ ๋๋ค ๐ค
(์ผ๋ฐ์ ์ผ๋ก๋ DHE ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ ๊ฒฝ์ฐ Params(์ฌ๋ฃ)๋ฅผ ๋ณด๋ด์ด Client/Server๊ฐ ๋์ผํ Params๋ก ์ธ์ ํค๋ฅผ ์์ฑํฉ๋๋ค)
- ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ ๊ณต๊ฐํค + ์๋ฒ ๋น๊ณต๊ฐํค = ํด๋ผ์ด์ธํธ ๋น๊ณต๊ฐํค + ์๋ฒ ๊ณต๊ฐํค = ์ธ์ ํค๋ฅผ ์์ฑํ๋ค.
Change Cipher Spec/Encryted Handshake Message : ์ธ์ ํค๋ฅผ ๋์นญํค๋ก ์ฌ์ฉํ ๊ฒ์ ์ ์ํ์ฌ Server -> Client๋ก ์ ์กํ๋ค.
https://eunhyee.tistory.com/199
โฃ Application Data
Application Data : ๊ฒฐ์ ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ์ ํค๋ฅผ ๋์นญํค๋ก ์ํธํํ์ฌ Client -> Server๋ก ์ ๋ฌํ๋ค.
2. TLS 1.3
โ DNS๋ฅผ ํตํ์ฌ URL์ผ๋ก IP ํ์ธ
โก TCP Handshaking(1 Round Trip Time)
- 3 Way Hanshaking
โข TLS Handshaking(1 Round Trip Time)
- 2 Round Trip Time์ด 1 Round Trip Time์ผ๋ก ๋ฐ๋๋ฉด์ ํจํท์ ํฌํจ๋๋ ์ ๋ณด๊ฐ ๋ง์์ง
Client Hello : ํด๋ผ์ด์ธํธ ๊ณต๊ฐํค๋ค(extension : key share), ํด๋ผ์ด์ธํธ๊ฐ ์ง์ํ๋ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์๋ค(extension : signature algorithms), ํด๋ผ์ด์ธํธ๊ฐ ์ง์ํ๋ ์ํธํ ๋ฐฉ์๋ค(chipher suites), ์ธ์ ID ๋ฑ ํฌํจํ ํจํท์ Client -> Server๋ก ์ ์กํ๋ค.
- TLS 1.3์ ๊ฐ๋ฅํ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ ๋ฆฌ์คํธ๋ค์ extension : signature algorithms์ ๋ณด๋ธ๋ค.
- TLS 1.3์ ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก PSK(Pre Shared Key)์ (EC)DHE๋ง ์ฌ์ฉ ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ ํ์ ์์ด Client Hello์ extension : key share์ (EC)DHE keys์ ๋ชจ๋ ํจ๊ป ๋ณด๋ธ๋ค.
- PSK์ ๋ํ ์ ๋ณด๋ฅผ extension : pre shared key, psk key exchange modes์ ๋ณด๋ด์ด TLS 1.3์ ๋งบ์ ๊ฒฝ์ฐ ๋ค์ ํต์ ์์๋ 0 Round Trip Time๋ก ํต์ ๊ฐ๋ฅํ๋ค.
- Extension์ TLS 1.3์ ์ํ ํ๋๋ก TLS 1.2์ ๊ฒฝ์ฐ ๋ฌด์ํ๋ค.
- TLS 1.3์ธ๋ฐ Version์ 1.2๊ฐ ๋์ค๋ ์ด์ ๋?!
Handshake Protocol: Client Hello
Version: TLS 1.2 (0x0303)
Extension: supported_versions (len=11)
Supported Versions length: 10
Supported Version: TLS 1.3 (0x0304)
Supported Version: TLS 1.2 (0x0303)
Supported Version: TLS 1.1 (0x0302)
Supported Version: TLS 1.0 (0x0301)
This is a Client Hello message. The Version value at the second line is not a typo. It is necessary for a TLS 1.3 message disguises itself as a TLS 1.2 one.
Why? In early tests, developers realized that updating the value in Version is next to impossible. Changing it from 0x0303(TLS 1.2) to 0x0304 (TLS 1.3) makes TLS handshake fail on lots of proxies and gateways.
The newcomer has to compromise, putting its supported version in Extension: supported_versions.
In the example, you can see a list of supported versions. If a server doesn’t support TLS 1.3, it will fall back to TLS 1.2 in the list.
Server Hello/Change Cipher Spec : ์๋ฒ๊ฐ ์ ํํ ํด๋ผ์ด์ธํธ์ ์ํธํ ๋ฐฉ์(chipher suites), ์๋ฒ ๋น๊ณต๊ฐํค(extension : key share)๋ฑ ํฌํจํ ํจํท์ Server -> Client๋ก ์ ์กํ๋ค.
- ์ธ์ ID๋ฅผ ํตํด ์ฌ์ฐ๊ฒฐ ์ธ์ ์ธ์ง ์ ๊ท ์ธ์ ์ธ์ง๋ ํ์ธํ๋ค.
- ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ ๊ณต๊ฐํค + ์๋ฒ ๋น๊ณต๊ฐํค = ํด๋ผ์ด์ธํธ ๋น๊ณต๊ฐํค + ์๋ฒ ๊ณต๊ฐํค = ์ธ์ ํค๋ฅผ ์์ฑํ๋ค.
Application Data(Certificate) : SSL ์ธ์ฆ์(์ ํ๋ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ CA ๋น๊ณต๊ฐํค๋ก ์ํธํ, ๋ธ๋ผ์ฐ์ ์ CA ๊ณต๊ฐํค๋ก ๋ณตํธํํ ๊ฒฝ์ฐ ์ ์ ์๋ช )๋ฅผ ์ธ์ ํค๋ก ์ํธํํ ํจํท์ Server -> Client๋ก ์ ์กํ๋ค.
โฃ Application Data
Change Cipher Spec/Application Data : ๊ฒฐ์ ๋ ์ํธํ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ธ์ ํค๋ฅผ ๋์นญํค๋ก ์ํธํํ์ฌ Client -> Server๋ก ์ ๋ฌํ๋ค.
- ๋ธ๋ผ์ฐ์ ์ CA ๊ณต๊ฐํค๋ก SSL ์ธ์ฆ์(์ ํ๋ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ CA ๋น๊ณต๊ฐํค๋ก ์ํธํ)๋ฅผ ๋ณตํธํ ํ SSL ์ธ์ฆ์๋ฅผ ์ ๋ขฐํ๋ค.(์ ์์๋ช )
- ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ ๋ฐฉ์์ผ๋ก ํด๋ผ์ด์ธํธ ๊ณต๊ฐํค + ์๋ฒ ๋น๊ณต๊ฐํค = ํด๋ผ์ด์ธํธ ๋น๊ณต๊ฐํค + ์๋ฒ ๊ณต๊ฐํค = ์ธ์ ํค๋ฅผ ์์ฑํ๋ค.
3. TLS 1.3 ์ ์ฅ์
๋ณด์ ๊ฐํ
- ๋ค์ด๊ทธ๋ ์ด๋ ๊ณต๊ฒฉ(Handshake ๋จ๊ณ์์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ ๋ฐ SSL/TLS ๋ฒ์ ๋ฑ์ ํ์ํ๋ ๊ณผ์ ์ ๊ณต๊ฒฉ์๊ฐ ๊ฐ์ ํ์ฌ ํ์ ๋ด์ฉ์ ๋ณด์์ ์ทจ์ฝํ ๊ฒ์ผ๋ก ๋ณ๊ฒฝํ๋ ๋ฐฉ์) ๋ฐฉ์ด๊ฐ ๊ฐ๋ฅ
- ์ทจ์ฝํ ์๊ณ ๋ฆฌ์ฆ ์ง์ ์ค๋จ
์ฑ๋ฅ ๊ฐํ
- TLS 1.2 - 2 Round Trip Time > 1 Round Trip Time์ผ๋ก ์ค์ด๋ค๊ฒ ๋๋ฉฐ ํต์ ์๋๊ฐ ๋นจ๋ผ์ง
- TLS 1.3 - 0 Round Trip Time๋ฅผ ์ ์ฉํ๊ฒ ๋๋ฉด HTTP์ ํต์ ์๋๊ฐ ๋์ผํด์ง
ํ๋ผ์ด๋ฒ์ ๊ฐํ
- SNI ํ๋ ์ํธํ ๊ฐ๋ฅ(Encrypted Server Name Indication)
- TCP Handshaking ๊ณผ์ ์์ Client Hello์ SNI๋ TLS Handshaking ๊ณผ์ ์ ์ด๋ผ ์ํธํํ ์ ์๋๋ฐ ์ํธํ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํ์ฌ ์ฌ์ฉ์๊ฐ ์ด๋ค ๋๋ฉ์ธ์ผ๋ก ์ ์ํ๋์ง๋ ์ ์ ์๊ฒ ๋จ
4. Cipher Suite
TLS_{ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ}_{์ธ์ฆ ์๊ณ ๋ฆฌ์ฆ}_WITH_{์ํธํ ์๊ณ ๋ฆฌ์ฆ}_{ํด์ฌ ์๊ณ ๋ฆฌ์ฆ}
- ํค ๊ตํ ์๊ณ ๋ฆฌ์ฆ : Client/Server Key Exchange์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
- ์ธ์ฆ ์๊ณ ๋ฆฌ์ฆ(๋น๋์นญํค ์ํธํ) : Certificate์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ
- ์ํธํ ์๊ณ ๋ฆฌ์ฆ(๋์นญํค ์ํธํ) : ์ธ์ ํค์ ์ฌ์ฉํ๋ ์๊ณ ๋ฆฌ์ฆ
- ํด์ฌ ์๊ณ ๋ฆฌ์ฆ : Certificate ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ์ ์ฌ์ฉ๋๋ ์๊ณ ๋ฆฌ์ฆ
- TLS 1.3์์๋ Client Hello์ extension : key share๋ก (EC)DHE์ ํค ๊ฐ์ ์ฌ์ ์ ์ ๋ฌ, extension : signature algorithms๋ก ์ฌ์ฉ ๊ฐ๋ฅํ ์ธ์ฆ/ํด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ ๋ฌํ์ฌ TLS 1.3 Cipher Suite๋ TLS_{์ํธํ ์๊ณ ๋ฆฌ์ฆ}_{ํด์ฌ ์๊ณ ๋ฆฌ์ฆ}๋ก ๋ํ๋ ๋๋ค.
- TLS 1.3 Cipher Suite List : TLS_AES_128_GCM_SHA256, TLS_AES_256_GCM_SHA384, TLS_CHACHA20_POLY1305_SHA256, TLS_AES_128_CCM_SHA256, TLS_AES_128_CCM_8_SHA256
์ฐธ๊ณ :
https://blog.naver.com/n_privacy/221412043898
https://msm8994.tistory.com/38
https://blog.devgenius.io/added-security-measures-and-changes-in-tls-1-3-fd93bbfecb8f
https://cabulous.medium.com/tls-1-2-andtls-1-3-handshake-walkthrough-4cfd0a798164
https://owasp.org/www-chapter-london/assets/slides/OWASPLondon20180125_TLSv1.3_Andy_Brodie.pdf
'Web(HTTPS)' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
HTTP/2์ HTTP/3 (0) | 2021.07.18 |
---|---|
HTTP and TLS(SSL) (0) | 2021.06.06 |
URI, URL, URN (0) | 2020.03.22 |
HTTP Method(GET/POST) (0) | 2020.03.22 |
HTTP Header (0) | 2020.03.22 |