์ํธ TLS ๋๋ mTLS๋ ์ํธ ์ธ์ฆ ๋ฐฉ๋ฒ์ ๋๋ค. TLS๋ฅผ ์ฌ์ฉํ๋ mTLS๋ ์ธ์ฆ ๋ฐ ๊ถํ ๋ถ์ฌ๋ฅผ ๋ชจ๋ ์ํํฉ๋๋ค. mTLS๋ ํธ๋ํฝ์ด ํด๋ผ์ด์ธํธ์ ์๋ฒ ์ฌ์ด์ ์๋ฐฉํฅ์์ ์์ ํ๊ณ ์ ๋ขฐํ ์ ์๋๋ก ๋ณด์ฅํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก TLS๋ ์๋ฒ ์ธ์ฆ๊ณผ ํต์ ์ํธํ๋ฅผ ์ ๊ณตํฉ๋๋ค. ์๋ฒ ์ธ์ฆ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ ์์ ํ์ธํ ์ ์๋๋ก ํ๊ณ , ํต์ ์ํธํ๋ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ์ฌ ์ค๊ฐ์ ๊ณต๊ฒฉ์ผ๋ก๋ถํฐ ๋ณดํธํฉ๋๋ค. ๊ทธ๋ฌ๋ TLS๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆํ์ง ์์ต๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ํต์ ํ๋ ๊ฒ์ ๋ณดํธํ์ง๋ง ์๋ฒ๊ฐ ํด๋ผ์ด์ธํธ๋ฅผ ์ธ์ฆํ์ง ์์ผ๋ฉด ํด๋ผ์ด์ธํธ๊ฐ ์ ๋ง๋ก ํด๋น ์๋ฒ์ ํต์ ํ๊ณ ์๋์ง ํ์ธํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณด์์ ์ทจ์ฝํ ์ํ๊ฐ ๋ ์ ์์ต๋๋ค.
mTLS๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์๋ฒ์ ํด๋ผ์ด์ธํธ ๋ชจ๋์ ๋ํ ์ธ์ฆ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฅผ ์ํด ํด๋ผ์ด์ธํธ๋ ์์ ์ ์ธ์ฆ์๋ฅผ ์๋ฒ์ ์ ๊ณตํ๊ณ ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ์๋ฅผ ํ์ธํ์ฌ ํด๋ผ์ด์ธํธ์ ์ ์์ ๊ฒ์ฆํฉ๋๋ค. ์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์ค์ ๋ก ํด๋น ํด๋ผ์ด์ธํธ์ธ์ง ํ์ธํ ์ ์์ผ๋ฉฐ ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ ์์ ํ์ธํ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ๋ ๋์ ๋ณด์ ์์ค์ ๋ฌ์ฑํ ์ ์์ต๋๋ค.
mTLS๋ ์ฃผ๋ก ์๋ฒ ๊ฐ์ ํต์ , API ํธ์ถ, ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ ์ฒ ๋ฑ์์ ์ฌ์ฉ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ๋ฐ ๊ด๋ฆฌ๊ฐ ๋ณต์กํ ์ ์์ผ๋ฏ๋ก ์์คํ ์ ์๊ตฌ์ฌํญ๊ณผ ์ํฉ์ ๋ฐ๋ผ ์ ์ ํ๊ฒ ์ฌ์ฉํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก TLS์์ ์๋ฒ์๋ TLS ์ธ์ฆ์์ ๊ณต๊ฐ/๊ฐ์ธ ํค ์์ด ์์ง๋ง ํด๋ผ์ด์ธํธ์๋ ์์ต๋๋ค. ์ผ๋ฐ์ ์ธ TLS ํ๋ก์ธ์ค๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํฉ๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ
- ์๋ฒ๊ฐ TLS ์ธ์ฆ์๋ฅผ ์ ์
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ธ์ฆ์๋ฅผ ํ์ธ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ํธํ๋ TLS ์ฐ๊ฒฐ์ ํตํด ์ ๋ณด ๊ตํ
๊ทธ๋ฌ๋ mTLS์์๋ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๋ชจ๋ ์ธ์ฆ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์์ชฝ ๋ชจ๋ ๊ณต๊ฐ/๊ฐ์ธ ํค ์์ ์ฌ์ฉํ์ฌ ์ธ์ฆํฉ๋๋ค. ์ผ๋ฐ TLS์ ๋น๊ตํ ๋ mTLS๋ ์ ๋น์ฌ์๋ฅผ ํ์ธํ๊ธฐ ์ํ ์ถ๊ฐ ๋จ๊ณ๊ฐ ์์ต๋๋ค.
- ํด๋ผ์ด์ธํธ๊ฐ ์๋ฒ์ ์ฐ๊ฒฐ
- ์๋ฒ๊ฐ TLS ์ธ์ฆ์๋ฅผ ์ ์
- ํด๋ผ์ด์ธํธ๋ ์๋ฒ์ ์ธ์ฆ์๋ฅผ ํ์ธ
- ํด๋ผ์ด์ธํธ๊ฐ TLS ์ธ์ฆ์๋ฅผ ์ ์
- ์๋ฒ๋ ํด๋ผ์ด์ธํธ์ ์ธ์ฆ์๋ฅผ ํ์ธ
- ์๋ฒ์์ ์ก์ธ์ค ๊ถํ ๋ถ์ฌ
- ํด๋ผ์ด์ธํธ์ ์๋ฒ๋ ์ํธํ๋ TLS ์ฐ๊ฒฐ์ ํตํด ์ ๋ณด๋ฅผ ๊ตํ
- ์ฌ๊ธฐ์ ์ดํด๋ณด์์ผ ํ ๊ฒ์ ์๋ฒ์ ํด๋ผ์ด์ธํธ์
LEAF CERTIFICATE
์ ํ๋ผ์ด๋น ํค์ ํด์๊ฐ์ด ๋์ผํ์ง ํ์ธํ๊ณLEAF CERTIFICATE
์ ISSUER๊ฐ ca.crt์ Subject์ ๋์ผํด์ผ ํฉ๋๋ค. ๋ํ ca.crt๋ROOT CERTIFICATE
์ด๋ฏ๋ก Subject์ Issuer์ด ๋์ผํฉ๋๋ค.
cd certificate && go run main.go
cd server && go run main.go
cd client
go run main.go -c=a
go run main.go -c=b
- ํด๋ผ์ด์ธํธ A ์์ฒญ
go run main.go -c=a
- ์๋ฒ ์ปค๋งจ๋
2023/05/05 22:45:08 =============== Header ===============
2023/05/05 22:45:08 User-Agent:Go-http-client/1.1
2023/05/05 22:45:08 Accept-Encoding:gzip
2023/05/05 22:45:08 =============== State ===============
2023/05/05 22:45:08 Version: 304
2023/05/05 22:45:08 HandshakeComplete: true
2023/05/05 22:45:08 DidResume: false
2023/05/05 22:45:08 NegotiatedProtocol:
2023/05/05 22:45:08 NegotiatedProtocolIsMutual: true
2023/05/05 22:45:08 Certificate chain:
2023/05/05 22:45:08 0 subject:/C=[Earth]/ST=[Asia]/L=[Mountain]/O=[Client A Company]/OU=[Engineering]/CN=Client A
2023/05/05 22:45:08 issuer:/C=[Earth]/ST=[Asia]/L=[Mountain]/O=[CA Company]/OU=[Engineering]/CN=CA
2023/05/05 22:45:08 =============== End ===============
- ํด๋ผ์ด์ธํธ B ์์ฒญ
go run main.go -c=b
- ์๋ฒ ์ปค๋งจ๋
2023/05/05 22:45:10 =============== Header ===============
2023/05/05 22:45:10 User-Agent:Go-http-client/1.1
2023/05/05 22:45:10 Accept-Encoding:gzip
2023/05/05 22:45:10 =============== State ===============
2023/05/05 22:45:10 Version: 304
2023/05/05 22:45:10 HandshakeComplete: true
2023/05/05 22:45:10 DidResume: false
2023/05/05 22:45:10 NegotiatedProtocol:
2023/05/05 22:45:10 NegotiatedProtocolIsMutual: true
2023/05/05 22:45:10 Certificate chain:
2023/05/05 22:45:10 0 subject:/C=[Earth]/ST=[Asia]/L=[Mountain]/O=[Client B Company]/OU=[Engineering]/CN=Client B
2023/05/05 22:45:10 issuer:/C=[Earth]/ST=[Asia]/L=[Mountain]/O=[CA Company]/OU=[Engineering]/CN=CA
2023/05/05 22:45:10 =============== End ===============