Search

[CKA] 39. TLS Basic

Date
2025/01/09
Category
Devops
Tag
Kubernetes
CKA
Security
λͺ©μ°¨

Β TLS Certificates

μ‚¬μš©μžκ°€ μ›Ή μ„œλ²„μ— μ•‘μ„ΈμŠ€ν•˜λ € ν•  λ•Œ TLS μΈμ¦μ„œλŠ” μ‚¬μš©μžμ™€ μ„œλ²„ μ‚¬μ΄μ˜ 톡신이 μ•”ν˜Έν™”ν•˜κ³ , μ„œλ²„μ˜ 신원을 ν™•μΈν•˜μ—¬ μ‚¬μš©μžκ°€ μ‹ λ’°ν•  수 μžˆλŠ” μ„œλ²„μ™€ μ—°κ²°λ˜λ„λ‘ ν•œλ‹€.

Senario

ν•œ μœ μ €κ°€ 온라인 λ±…ν‚Ή 앱에 접속할 λ•Œ μ•”ν˜Έν™”κ°€ μžˆμ„ λ•Œμ™€ 없을 λ•Œμ˜ μ‹œλ‚˜λ¦¬μ˜€λ₯Ό μ‚΄νŽ΄λ³΄μž

Β Without Secure connectivity

μ•ˆμ „ν•œ 연결성이 μ—†μœΌλ©΄ μ‚¬μš©μžκ°€ μž…λ ₯ν•œ 자격 증λͺ…이 일반 ν…μŠ€νŠΈ ν˜•μ‹μœΌλ‘œ μ „μ†‘λœλ‹€. μ΄λ•Œ 해컀가 λ„€νŠΈμ›Œν¬ νŠΈλž˜ν”½μ„ νƒμ§€ν•˜λ©΄(sniffing) 자격증λͺ…을 μ‰½κ²Œ μΆ”μΆœν•΄ μ‚¬μš©μžμ˜ 은행 κ³„μ’Œλ₯Ό 해킬할 수 μžˆλ‹€.

Β With Secure Connectivity

ν‚€λ₯Ό μ‚¬μš©ν•΄ 데이터λ₯Ό μ•”ν˜Έν™”ν•œλ‹€. ν‚€λŠ” 기본적으둜 μž„μ˜μ˜ μˆ«μžμ™€ μ•ŒνŒŒλ²³μœΌλ‘œ 이뀄져 μžˆλ‹€. μ‚¬μš©μžλŠ” μž„μ˜μ˜ 숫자λ₯Ό 데이터에 μΆ”κ°€ν•˜κ³ , 이λ₯Ό 인식할 수 μ—†λŠ” ν˜•μ‹μœΌλ‘œ μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„λ‘œ 데이터λ₯Ό μ „μ†‘ν•œλ‹€. 해컀가 λ„€νŠΈμ›Œν¬λ₯Ό νƒμ§€ν•˜λ”λΌλ„ 데이터λ₯Ό 얻을 μˆ˜λŠ” μžˆμ§€λ§Œ, μ•”ν˜Έν™”κ°€ λ˜μ–΄μžˆμ–΄ μ‚¬μš©ν•  수 μ—†λ‹€. ν•˜μ§€λ§Œ 데이터λ₯Ό λ°›λŠ” μ„œλ²„λ„ λ§ˆμ°¬κ°€μ§€μ΄λ‹€. ν‚€ μ—†μ΄λŠ” λ³΅ν˜Έν™”ν•  수 μ—†κΈ° λ•Œλ¬Έμ— ν‚€μ˜ 사본도 μ„œλ²„μ— 전솑해야 ν•œλ‹€. μ΄λ•Œ 해컀가 κ°€λ‘œμ±Œ 수 μžˆλ‹€λŠ” μœ„ν—˜μ΄ μžˆλ‹€.
이λ₯Ό Symmetric Encryption(λŒ€μΉ­ μ•”ν˜Έν™”)라고 ν•œλ‹€. μ•ˆμ „ν•œ μ•”ν˜Έν™” λ°©μ‹μ΄μ§€λ§Œ λ°μ΄ν„°μ˜ μ•”ν˜Έν™”μ™€ λ³΅ν˜Έν™”μ— λŒ€ν•œ λ™μΌν•œ ν‚€λ₯Ό μ‚¬μš©ν•˜κ³ , 이 ν‚€κ°€ μ†‘μ‹ μžμ™€ μˆ˜μ‹ μž 간에 κ΅ν™˜λ˜μ–΄μ•Ό ν•˜λ―€λ‘œ 해컀가 킀에 μ ‘κ·Όν•  수 μžˆλ‹€λŠ” μœ„ν—˜μ΄ μžˆλ‹€.

Β Asymmetric Encryption

λΉ„λŒ€μΉ­ μ•”ν˜Έν™”λŠ” 데이터λ₯Ό μ•”ν˜Έν™”ν•˜κ³  λ³΅ν˜Έν™”ν•˜λŠ” 데 단일킀λ₯Ό μ‚¬μš©ν•˜λŠ” λŒ€μ‹ , 개인 ν‚€(private key)와 곡개 ν‚€(public key)둜, ν•œ 쌍의 ν‚€λ₯Ό μ‚¬μš©ν•œλ‹€.
개인 ν‚€ = μ—΄μ‡ , 곡개 ν‚€ = μžλ¬Όμ‡ λ‘œ μƒκ°ν•˜λ©΄ λœλ‹€. μžλ¬Όμ‡ μ—λŠ” λˆ„κ΅¬λ‚˜ 접근이 κ°€λŠ₯ν•˜μ§€λ§Œ 이λ₯Ό μ—΄ 수 μžˆλŠ” 것은 본인이 κ°€μ§„ μ—΄μ‡ λ‘œλ§Œ κ°€λŠ₯ν•˜λ‹€.

Use Case - SSH

Passwordλ₯Ό μ‚¬μš©ν•˜κΈ°μ—λŠ” μœ„ν—˜μ„±μ΄ λ”°λ₯΄κΈ° λ•Œλ¬Έμ— ν‚€ νŽ˜μ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ SSH μ•‘μ„ΈμŠ€λ₯Ό λ³΄μ•ˆν•˜κ³ μž ν•œλ‹€. ν‚€ νŽ˜μ–΄λ₯Ό μƒμ„±ν•˜κΈ° μœ„ν•΄ ssh-keygen λͺ…령을 μ‹€ν–‰ν•œλ‹€. ν•΄λ‹Ή λͺ…령은 개인 ν‚€λ‘œ id_rsaλ₯Ό μƒμ„±ν•˜κ³ , 곡개 ν‚€λ‘œ id_rsa.pubλ₯Ό μƒμ„±ν•œλ‹€. κ·Έ λ‹€μŒ μ„œλ²„μ˜ λͺ¨λ“  접근을 μ°¨λ‹¨ν•˜κ³ , 곡개 ν‚€λ₯Ό ν†΅ν•΄μ„œλ§Œ μ ‘κ·Όν•  수 μžˆλ„λ‘ μ„œλ²„λ₯Ό λ³΄ν˜Έν•œλ‹€. μ΄λŠ” 일반적으둜 μ„œλ²„μ˜ ~/.ssh/authorized_keys νŒŒμΌμ— 곡개 ν‚€λ₯Ό μΆ”κ°€ν•¨μœΌλ‘œμ¨ 이뀄진닀. 이제 SSH에 λˆ„κ΅¬λ‚˜ 곡개 킀에 μ ‘κ·Όν•  수 μžˆμ§€λ§Œ, 개인 ν‚€λŠ” 본인만 (λ…ΈνŠΈλΆ 등에) λ³΄κ΄€ν•˜κ³  있기 λ•Œλ¬Έμ— λˆ„κ΅¬λ„ μ„œλ²„μ— μ ‘κ·Όν•  수 μ—†λ‹€.
SSH에 λŒ€ν•œ λ™μΌν•œ 개인 ν‚€λ₯Ό μ—¬λŸ¬ μ„œλ²„μ— μ‚¬μš©ν•  수 있기 λ•Œλ¬Έμ—, λ‹€λ₯Έ μ„œλ²„κ°€ μžˆλ‹€λ©΄ 곡개 ν‚€ 사본을 λ§Œλ“€μ–΄ μ›ν•˜λŠ” 만큼 μ„œλ²„μ— 두어 접근을 막을 수 μžˆλ‹€. λ‹€λ₯Έ μ‚¬μš©μžκ°€ μ„œλ²„μ— μ ‘κ·Όν•΄μ•Ό λ˜λŠ” κ²½μš°μ—λŠ” ν•΄λ‹Ή μ‚¬μš©μžμ˜ ν‚€ νŽ˜μ–΄ 쀑 곡용 ν‚€λ₯Ό ~/.ssh/authorized_keys에 μΆ”κ°€ν•˜λ©΄ 접속이 κ°€λŠ₯ν•˜λ‹€.

With Symmetric Encryption

▢️ With Secure Connectivity μ—μ„œ 데이터에 λŒ€ν•œ μ•”ν˜Έν™”λ₯Ό μ§„ν–‰ν–ˆμ§€λ§Œ μ„œλ²„μ—κ²Œ ν‚€λ₯Ό 전달해야 ν–ˆκ³ , 이 κ³Όμ •μ—μ„œ 해컀 λ˜ν•œ ν‚€λ₯Ό κ°€λ‘œμ±Œ 수 있기 λ•Œλ¬Έμ— λ³΅ν˜Έν™”ν•  수 μžˆλ‹€λŠ” λ¬Έμ œκ°€ μžˆμ—ˆλ‹€. Symmetricκ³Ό Asymmetric Encryption을 ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλ‹€.
1.
μ„œλ²„μ—μ„œ ν‚€ νŽ˜μ–΄λ₯Ό μƒμ„±ν•œλ‹€.
# 개인 ν‚€ 생성: openssl genrsa -out [pri-keyname] [key-length] openssl genrsa -out my-bank.key 1024 # 곡개 ν‚€ 생성: openssl rsa -in [pri-keyname] -pubout > [pub-keyname] openssl rsa -in my-bank.key -pubout > mybank.pem
Bash
볡사
β€’
key-length: ν‚€μ˜ λΉ„νŠΈ 길이λ₯Ό μ§€μ •ν•œλ‹€. RSA의 κ²½μš°μ—λŠ” μ΅œμ†Œ 2048λΉ„νŠΈ 이상을 ꢌμž₯ν•œλ‹€.
2.
HTTPS둜 μ›Ή μ„œλ²„ μ•‘μ„ΈμŠ€
β€’
μ‚¬μš©μžκ°€ HTTPSλ₯Ό 톡해 μ›Ή λ²„μ„œμ— 처음 μ•‘μ„ΈμŠ€ν•˜λ©΄ μ„œλ²„μ—μ„œ 곡개 ν‚€λ₯Ό λ°›κ²Œ λœλ‹€.
β€’
해컀도 λ„€νŠΈμ›Œν¬λ₯Ό μŠ€λ‹ˆν•‘ν•˜κ³  μžˆμ–΄ 곡개 ν‚€λ₯Ό λ°›λŠ”λ‹€.
3.
Symmetric Encryption
β€’
μœ μ €μ˜ λΈŒλΌμš°μ €κ°€ μ„œλ²„λ‘œλΆ€ν„° 전달받은 곡개 ν‚€λ₯Ό 톡해 λŒ€μΉ­ ν‚€(symmetric key)λ₯Ό μ•”ν˜Έν™”ν•œλ‹€.
4.
μ•”ν˜Έν™”λœ symmetric key 전솑
β€’
μ•”ν˜Έν™”ν•œ λŒ€μΉ­ ν‚€λ₯Ό μ„œλ²„λ‘œ μ „μ†‘ν•œλ‹€.
β€’
이 κ³Όμ •μ—μ„œ 해컀도 ν•΄λ‹Ή 볡사본을 얻을 수 μžˆλ‹€.
5.
λ³΅ν˜Έν™”
β€’
μ„œλ²„λŠ” 곡개 ν‚€(μžλ¬Όμ‡ )에 λŒ€ν•œ 개인 ν‚€κ°€ μ‘΄μž¬ν•˜μ—¬ μœ μ €κ°€ μ•”ν˜Έν™”ν•œ λŒ€μΉ­ ν‚€λ₯Ό 얻을 수 μžˆλ‹€.
β€’
ν•˜μ§€λ§Œ ν•΄μ»€λŠ” 개인 ν‚€κ°€ μ—†κΈ° λ•Œλ¬Έμ— λ³΅ν˜Έν™”λŠ” μ§„ν–‰ν•˜μ§€ λͺ»ν•œλ‹€.
β€’
이둜써 λŒ€μΉ­ ν‚€λŠ” μ‚¬μš©μžμ™€ μ„œλ²„λ§Œ μ‚¬μš©ν•  수 μžˆλ‹€.
6.
데이터 전달
β€’
이제 μ‚¬μš©μžλŠ” 데이터λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„λ‘œ 보내면 μ„œλ²„μ—μ„œλŠ” λŒ€μΉ­ ν‚€λ₯Ό 톡해 데이터λ₯Ό λ³΅ν˜Έν™”ν•  수 μžˆλ‹€.
β€’
ν•΄μ»€λŠ” 데이터λ₯Ό κ°€λ‘œμ±Œ 수 μžˆμ§€λ§Œ λ³΅ν˜Έν™”ν•˜μ§€ λͺ»ν•΄ 확인할 수 μ—†λ‹€.
μ •λ¦¬ν•˜λ©΄ λ‹€μŒκ³Ό κ°™λ‹€.
β€’
μ‚¬μš©μžκ°€ HTTPS둜 μ ‘μ†ν•˜λ©΄ μ„œλ²„κ°€ 곡개 ν‚€λ₯Ό 전달
β€’
μ‚¬μš©μžμ˜ λΈŒλΌμš°μ €μ—μ„œ 전달받은 곡개 ν‚€λ‘œ λŒ€μΉ­ ν‚€ μ•”ν˜Έν™”
β€’
μ„œλ²„μ—μ„œ 개인 ν‚€λ₯Ό 톡해 λ³΅ν˜Έν™”ν•˜μ—¬ λŒ€μΉ­ ν‚€ 확보
β€’
μ‚¬μš©μžκ°€ λŒ€μΉ­ ν‚€λ₯Ό μ‚¬μš©ν•΄ μ•”ν˜Έν™”λœ 데이터λ₯Ό μ „λ‹¬ν•˜λ©΄ μ„œλ²„λŠ” 같은 λŒ€μΉ­ ν‚€λ‘œ λ³΅ν˜Έν™”
β€’
ν•΄μ»€λŠ” μ‚¬μš©μžμ™€ μ„œλ²„λ‘œ κ°„μ˜ 데이터듀을 κ°€λ‘œμ±„μ§€λ§Œ 개인 ν‚€μ˜ λΆ€μž¬λ‘œ λ³΅ν˜Έν™”ν•˜μ§€ λͺ»ν•¨

Β Certificate

Senario

λŒ€μΉ­ 킀와 λΉ„λŒ€μΉ­ ν‚€λ₯Ό ν•¨κ»˜ μ‚¬μš©ν•˜μ—¬ 해컀가 μ•”ν˜Έν™”λœ 데이터에 μ ‘κ·Όν•  수 없도둝 λ§Œλ“€μ—ˆλ‹€. ν•˜μ§€λ§Œ 해컀가 데이터λ₯Ό μ–»κΈ° μœ„ν•΄ λ‹€λ₯Έ 방법을 μ‚¬μš©ν•œλ‹€λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? 해컀가 μ‚¬μš©μžκ°€ μ ‘μ†ν•˜λ €λŠ” μ›Ήμ‚¬μ΄νŠΈλ₯Ό λ˜‘κ°™μ΄ λ§Œλ“€κ³ , λ„€νŠΈμ›Œν¬λ₯Ό μ‘°μž‘ν•΄ μžμ‹ μ˜ μ„œλ²„λ‘œ λ³΄λ‚΄λŠ” 경우λ₯Ό μƒκ°ν•΄λ³΄μž.
ν•΄μ»€λŠ” μžμ‹ μ˜ μ„œλ²„μ— ν‚€ νŽ˜μ–΄λ₯Ό μƒμ„±ν•˜κ³ , μ‚¬μš©μžλ₯Ό μžμ‹ μ˜ μ„œλ²„μ— μ ‘μ†ν•˜κ²Œ ν•œλ‹€. 해컀 μ„œλ²„λŠ” 곡개 ν‚€λ₯Ό μ‚¬μš©μžμ—κ²Œ 보내고, μ‚¬μš©μžλŠ” ν•΄λ‹Ή ν‚€λ₯Ό 톡해 λŒ€μΉ­ ν‚€λ₯Ό 해컀 μ„œλ²„μ— 보낸닀. 해컀 μ„œλ²„λŠ” 이제 μ‚¬μš©μžμ˜ λŒ€μΉ­ ν‚€λ₯Ό μ–»μ—ˆκ³ , μ‚¬μš©μžκ°€ 둜그인 데이터λ₯Ό 보내면 ν•΄λ‹Ή 자격 증λͺ…이 ν•΄μ»€μ—κ²Œ λ„˜μ–΄κ°€κ²Œ λœλ‹€.

Certificate

이λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Όν• κΉŒ? μ„œλ²„κ°€ ν‚€λ₯Ό 혼자 λ³΄λ‚΄λŠ” 것이 μ•„λ‹ˆλΌ ν‚€λ₯Ό κ°€μ§„ μΈμ¦μ„œλ₯Ό λ³΄λ‚΄λŠ” 것이닀. μΈμ¦μ„œλŠ” μΈμ¦μ„œκ°€ λ°œκΈ‰λœ 주체에 λŒ€ν•œ 정보, ν•΄λ‹Ή μ„œλ²„μ˜ 곡개 ν‚€, μ„œλ²„μ˜ μœ„μΉ˜ λ“± λ‹€μ–‘ν•œ 정보λ₯Ό ν¬ν•¨ν•œλ‹€. λͺ¨λ“  μΈμ¦μ„œμ—λŠ” 이름(name)이 있으며, μ΄λŠ” μΈμ¦μ„œκ°€ λ°œκΈ‰λ˜λŠ” μ‚¬λžŒμ΄λ‚˜ 주체λ₯Ό 가리킀기에 신원을 ν™•μΈν•˜λŠ”λ° μžˆμ–΄ 맀우 μ€‘μš”ν•˜λ‹€.
μ›Ή μ„œλ²„μ— λŒ€ν•œ μΈμ¦μ„œλΌλ©΄ 이름(name)은 μ‚¬μš©μžκ°€ λΈŒλΌμš°μ €μ˜ URL에 μž…λ ₯ν•œ 것과 μΌμΉ˜ν•΄μ•Ό ν•œλ‹€. λ§Œμ•½ 은행이 λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œλ„ μ•Œλ €μ Έ 있고, μ‚¬μš©μžκ°€ λ‹€λ₯Έ μ΄λ¦„μœΌλ‘œλ„ μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ— μ ‘κ·Όν•  수 있게 ν•˜λ €λ©΄, λͺ¨λ“  이름을 μΈμ¦μ„œμ˜ Subject ν•„λ“œ μ•„λž˜ Alternative Name μ„Ήμ…˜μ— μ§€μ •λ˜μ–΄μ•Ό ν•œλ‹€.

Sign

ν•˜μ§€λ§Œ μΈμ¦μ„œλŠ” λˆ„κ΅¬λ‚˜ 생성이 κ°€λŠ₯ν•˜κΈ° λ•Œλ¬Έμ— μΈμ¦μ„œκ°€ μ§„ν’ˆμΈμ§€ 확인할 수 μžˆμ–΄μ•Ό ν•œλ‹€. μΈμ¦μ„œμ—μ„œ κ°€μž₯ μ€‘μš”ν•œ 뢀뢄이닀. μΈμ¦μ„œλ₯Ό μƒμ„±ν•˜λ©΄ 직접 μ„œλͺ…을 ν•΄μ•Ό ν•˜κ³ , 이λ₯Ό self-signed certificated 라고 ν•œλ‹€.
λͺ¨λ“  μ›Ή λΈŒλΌμš°μ €λŠ” μΈμ¦μ„œ μœ νš¨μ„± 검사(Certificate Validation) λ©”μ»€λ‹ˆμ¦˜μ„ κ°€μ§€κ³  있으며, λΈŒλΌμš°μ € ν…μŠ€νŠΈμ—μ„œ μ„œλ²„λ‘œλΆ€ν„° μΈμ¦μ„œλ₯Ό λ°›μ•„ μΈμ¦μ„œλ₯Ό κ²€μ¦ν•œλ‹€. μΈμ¦μ„œκ°€ μœ νš¨ν•˜μ§€ μ•ŠμœΌλ©΄ λΈŒλΌμš°μ €λŠ” μ‚¬μš©μžμ—κ²Œ κ²½κ³ λ₯Ό ν‘œμ‹œν•œλ‹€.

Β Certificate Authority (CA)

μ›Ή λΈŒλΌμš°μ €κ°€ μ‹ λ’°ν•  μ›Ήμ„œλ²„ μΈμ¦μ„œλŠ” μ–΄λ–»κ²Œ λ§Œλ“€κΉŒ? κΆŒν•œ μžˆλŠ” μ‚¬λžŒμ΄ μΈμ¦μ„œμ— μ„œλͺ…을 μ–΄λ–»κ²Œ ν• κΉŒ?
μ΄λ•Œ CAκ°€ λ“±μž₯ν•œλ‹€. CAλŠ” 우리λ₯Ό λŒ€μ‹ ν•΄ 우리의 μΈμ¦μ„œμ— μ‚¬μΈν•˜κ³  검증을 ν•΄μ£ΌλŠ” 기관이닀. λŒ€ν‘œμ μœΌλ‘œλŠ” Symantec, DigiCert, Comodo, GlobalSign 등이 μžˆλ‹€.

Sign Certificates

1.
CSR: 이전에 μƒμ„±ν•œ 킀와 μ›Ήμ‚¬μ΄νŠΈμ˜ 도메인 이름을 μ‚¬μš©ν•˜μ—¬ μΈμ¦μ„œ μ„œλͺ… μš”μ²­(CSR, Certificate Signing Request)을 μƒμ„±ν•œλ‹€. OpenSSL λͺ…λ Ήμ–΄λ₯Ό μ‚¬μš©ν•˜μ—¬ .csr νŒŒμΌμ„ 생성할 수 μžˆλ‹€. CSR νŒŒμΌμ€ CA에 μ„œλͺ…을 μš”μ²­ν•˜κΈ° μœ„ν•΄ μ „μ†‘λ˜μ–΄μ•Ό ν•œλ‹€.
# openssl req -new -key [개인 ν‚€ 파일] -out [생성할 CSR 파일] -subj "/CN=[도메인 이름]" openssl req -new -key my-bank.key -out my-back.csr \ -subj "/C=US/ST=CA/O=MyOrg, Inc./CN=my-bank.com"
Bash
볡사
2.
Validate Infromation: CAμ—μ„œλŠ” 제좜된 μ •λ³΄μ˜ μ§„μœ„λ₯Ό ν™•μΈν•œλ‹€. CAλŠ” μ‹€μ œ λ„λ©”μΈμ˜ μ†Œμœ μžκ°€ λ§žλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ 기법듀을 μ‚¬μš©ν•œλ‹€.
3.
Sign and Send Certificate: 확인이 μ™„λ£Œλ˜λ©΄ CAλŠ” μΈμ¦μ„œμ— μ„œλͺ…을 ν•˜μ—¬ μ‚¬μš©μžμ—κ²Œ λ°˜ν™˜ν•œλ‹€.
해컀가 같은 λ°©μ‹μœΌλ‘œ μΈμ¦μ„œμ— μ„œλͺ…을 λ°›μœΌλ € ν•˜λ©΄ 검증 단계λ₯Ό ν†΅κ³Όν•˜μ§€ λͺ»ν•΄ CAμ—κ²Œ κ±°λΆ€λœλ‹€.

How Browsers Verify CA Legitimacy

CA μžμ²΄λ„ pub-pri ν‚€ νŽ˜μ–΄λ₯Ό κ°€μ§€κ³  μžˆλ‹€. CAλŠ” μΈμ¦μ„œμ— μ„œλͺ…을 ν•  λ•Œ κ°œμΈν‚€λ₯Ό μ‚¬μš©ν•œλ‹€. λͺ¨λ“  CA의 곡개 ν‚€λŠ” λΈŒλΌμš°μ €μ— λ‚΄μž₯λ˜μ–΄ μžˆλŠ”λ°, λΈŒλΌμš°μ €λŠ” CA의 κ³΅κ°œν‚€λ₯Ό 톡해 μΈμ¦μ„œκ°€ μ‹€μ œλ‘œ CA에 μ˜ν•΄ μ„œλͺ…λ˜μ—ˆμŒμ„ κ²€μ¦ν•œλ‹€.
λΈŒλΌμš°μ €μ— λ‚΄μž₯된 CAλŠ” 곡곡 μ›Ήμ‚¬μ΄νŠΈ(예: 은행, 이메일 λ“±)의 신뒰성을 보μž₯ν•˜μ§€λ§Œ, 쑰직 λ‚΄λΆ€μ—μ„œ ν˜ΈμŠ€νŒ…λ˜λŠ” μ‚¬μ΄νŠΈμ˜ κ²€μ¦μ—λŠ” λ„μ›€λ˜μ§€ μ•ŠλŠ”λ‹€. λ”°λΌμ„œ λ‚΄λΆ€μ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆλŠ” 개인 CAλ₯Ό ν˜ΈμŠ€νŒ…ν•΄μ•Ό ν•œλ‹€. λŒ€λΆ€λΆ„μ˜ CAκ°€ 내뢀에 배포할 수 μžˆλŠ” CA μ„œλ²„ μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•œλ‹€. 이둜써 쑰직원듀은 λΈŒλΌμš°μ €μ— λ‚΄λΆ€ CA μ„œλ²„μ˜ 곡개 ν‚€λ₯Ό μ„€μΉ˜ν•˜μ—¬ 쑰직 λ‚΄μ—μ„œ μ•ˆμ „ν•œ 연결을 ꡬ좕할 수 μžˆλ‹€.

Β Summary

각 ν‚€νŽ˜μ–΄μ— λŒ€ν•΄ μƒ‰μœΌλ‘œ ν‘œν˜„ν•˜κ³  어디에 μœ„μΉ˜ν•΄μžˆλŠ”μ§€ μ •λ¦¬ν•˜λ©° ν‘œν˜„ν•΄λ³΄μ•˜λ‹€
1.
κ΄€λ¦¬μžλŠ” ν•œ 쌍의 ν‚€λ‘œ μ„œλ²„μ˜ SSH μ—°κ²° λ³΄μ•ˆ
β€’
μ„œλ²„ - Pub
β€’
κ΄€λ¦¬μž - Pri
2.
μ„œλ²„λŠ” 또 λ‹€λ₯Έ ν‚€νŽ˜μ–΄λ₯Ό 톡해 HTTPS νŠΈλž˜ν”½ 확보
β€’
μ„œλ²„ - Pub, Pri
3.
μ΄λ•Œ HTTPS 인증을 μœ„ν•΄ μ„œλ²„λŠ” CA에 μΈμ¦μ„œ μ„œλͺ… μš”μ²­μ„ 보냄 (CSR은 개인 ν‚€λ‘œ μ•”ν˜Έν™”)
β€’
μ„œλ²„ - Pub, Pri
β€’
CA - CSR(Pub), Pub, Pri
4.
CAλŠ” 개인 ν‚€λ‘œ CSR에 μ„œλͺ…ν•˜μ—¬ μΈμ¦μ„œλ₯Ό μ„œλ²„λ‘œ 전솑 μ„œλͺ…λœ μΈμ¦μ„œλ‘œ μ›Ή μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 배포
β€’
μ„œλ²„ - Pub, Pri, CERT(Pub)
5.
μ‚¬μš©μžκ°€ μ›Ή μ„œλ²„μ— μ•‘μ„ΈμŠ€ν•  λ•Œλ§ˆλ‹€ μ„œλ²„λŠ” 곡개 ν‚€λ₯Ό 담은 μΈμ¦μ„œλ₯Ό 보냄
β€’
μ‚¬μš©μž - Pub, CERT(Pub)
6.
λΈŒλΌμš°μ €λŠ” μΈμ¦μ„œλ₯Ό 읽고 μ„œλ²„μ˜ κ³΅κ°œν‚€λ₯Ό κ²€μ¦ν•˜κ³  μ–»κΈ° μœ„ν•΄ CA κ³΅κ°œν‚€λ₯Ό μ‚¬μš©
β€’
μ‚¬μš©μž - Symm Key, Pub, Pub
7.
μ‚¬μš©μžλŠ” μ„œλ²„μ˜ κ³΅κ°œν‚€λ‘œ λŒ€μΉ­ν‚€λ₯Ό μ•”ν˜Έν™”ν•˜μ—¬ μ„œλ²„λ‘œ 전솑
β€’
μ„œλ²„ - Pub, Pri, CERT(Pub), Pub(Symm Key)
β€’
μ‚¬μš©μž - Symm Key, Pub, Pub
8.
μ„œλ²„λŠ” κ°œμΈν‚€λ‘œ λ©”μ‹œμ§€λ₯Ό ν•΄λ…ν•˜κ³  λŒ€μΉ­ν‚€λ₯Ό μ–»μŒ 이 λŒ€μΉ­ν‚€λ₯Ό 톡해 μ‚¬μš©μžμ™€ 톡신을 이어감
β€’
μ„œλ²„ - Pub, Pri, CERT(Pub), Symm Key
β€’
μ‚¬μš©μž - Symm Key, Pub, Pub

Extra

TLS Client Certification

ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ˜ μœ νš¨μ„±μ„ μ„œλ²„μ˜ μΈμ¦μ„œλ₯Ό 톡해 ν™•μΈν•˜λŠ”λ°, λ°˜λŒ€λ‘œ μ„œλ²„λŠ” ν΄λΌμ΄μ–ΈνŠΈλ₯Ό μ–΄λ–»κ²Œ 확인할 수 μžˆμ„κΉŒ? ν™•μΈμ˜ 방법 쀑 ν•˜λ‚˜λ‘œ, μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈμ˜ μΈμ¦μ„œλ₯Ό μš”μ²­ν•  수 μžˆλ‹€. ν΄λΌμ΄μ–ΈνŠΈκ°€ CAλ‘œλΆ€ν„° μ„œλͺ…λœ μΈμ¦μ„œλ₯Ό μƒμ„±ν•˜μ—¬ μ„œλ²„μ—κ²Œ μΈμ¦μ„œλ₯Ό 보내 ν΄λΌμ΄μ–ΈνŠΈμ— λŒ€ν•œ 검증이 μ΄λ€„μ§€κ²Œ ν•  수 μžˆλ‹€.
μ›Ή μ„œλ²„μ—μ„œλŠ” TLS ν΄λΌμ΄μ–ΈνŠΈ μΈμ¦μ„œκ°€ 일반적으둜 κ΅¬ν˜„λ˜μ§€ μ•Šμ•„ μˆ˜λ™μœΌλ‘œ 생성 및 관리할 ν•„μš”κ°€ μ—†λ‹€. ν•˜μ§€λ§Œ 호슀트 λ‚΄μ—μ„œλŠ” λͺ¨λ‘ κ΅¬ν˜„λ˜μ–΄ μžˆλ‹€.

PKI

CA, μ„œλ²„, λ””μ§€ν„Έ μΈμ¦μ„œλ₯Ό μƒμ„±ν•˜κ³  λ°°ν¬ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό ν¬ν•¨ν•œ λͺ¨λ“  인프라λ₯Ό Public Key Infrastructure라고 ν•œλ‹€.

Key Pair

데이터λ₯Ό μ•”ν˜Έν™”ν•  수 μžˆλŠ” 것은 ν‚€ νŽ˜μ–΄λΏλ§Œμ΄ μ•„λ‹ˆλ‹€.
개인 ν‚€λ‘œ μ•”ν˜Έν™”ν•œ λ°μ΄ν„°λŠ” 곡개 ν‚€λ₯Ό κ°€μ§„ λˆ„κ΅¬λ‚˜ 데이터λ₯Ό λ³΅ν˜Έν™”ν•  수 μžˆλ‹€.
λ°˜λŒ€λ‘œ 곡개 ν‚€λ‘œ μ•”ν˜Έν™”ν•œ λ°μ΄ν„°λŠ” 개인 ν‚€λ₯Ό κ°€μ§„ μ‚¬λžŒλ§Œ 데이터λ₯Ό λ³΅ν˜Έν™”ν•  수 μžˆλ‹€.

Naming Convention

개인 ν‚€λŠ” 이름이든 ν™•μž₯μžλ“  keyλΌλŠ” 단어λ₯Ό ν¬ν•¨ν•˜λ©°, 일반 κ³΅μš©ν‚€λ‚˜ μΈμ¦μ„œλŠ” κ·Έλ ‡μ§€ μ•Šλ‹€.
Certificate (Public Key) *.crt *.pem
Private Key *.key *-key.pem
server.crt server.pem client.crt client.pem
server.key server-key.pem client.key client-key.pem