Kafka with SSL์„ ๊ตฌ์ถ•ํ•˜๊ธฐ ์œ„ํ•œ ์ฒซ๊ฑธ์Œ! openssl๋กœ ๊ฐœ์ธํ‚ค/๊ณต๊ฐœํ‚ค๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR)์„ ๋งŒ๋“ค๊ณ , ์„œ๋ช…๊นŒ์ง€ ๋ฐ›๊ธฐ!

8 minute read

๋“ค์–ด๊ฐ€๋ฉฐ

ํšŒ์‚ฌ์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์˜จํ”„๋ ˆ๋ฏธ์Šค๋กœ ๊ตฌ์ถ•ํ•˜๋ฉด์„œ ๋ธŒ๋กœ์ปค๊ฐ€ SSL๋กœ ํ†ต์‹ ํ•˜๋„๋ก ๊ตฌ์ถ•ํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. ๋งˆ์นจ CCDAK ์‹œํ—˜์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์—ˆ๊ณ , ์ด๋ฒˆ์— openssl๋ผ๋Š” ๋„๊ตฌ๋ฅผ ์ œ๋Œ€๋กœ ์ข€ ์ตํ˜€๋ณด๊ณ  ์žˆ์–ด์„œ ๊ด€๋ จํ•ด์„œ ํƒ์ƒ‰ํ•œ ๋‚ด์šฉ์„ ์ด๋ ‡๊ฒŒ ์ •๋ฆฌํ•ด๋ด…๋‹ˆ๋‹ค ใ…Žใ…Ž

SSL/TLS์— ๋Œ€ํ•ด์„  โ€œ์ „์†ก ๊ณ„์ธต ๋ณด์•ˆ SSL/TLSโ€ ํฌ์ŠคํŠธ์—์„œ ์ •๋ฆฌํ•œ ๊ฒƒ์ด ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ“–

๊ธฐ๋ณธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ•

openssl์€ ๊ฐœ์ธํ‚ค/๊ณต๊ฐœํ‚ค ์Œ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํฌํ•จํ•ด ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(CSR), ๊ณต๊ฐœ ์ธ์ฆ์„œ(CRT) ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๊นŒ์ง€! SSL/TLS์™€ ๊ด€๋ จ๋œ ๊ฑฐ์˜ ๋ชจ๋“  ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค! ใ…Žใ…Ž

๊ธฐ๋ณธ์ ์ธ ์‚ฌ๋ก€๋“ค๋ถ€ํ„ฐ ์‘์šฉ ์‚ฌ๋ก€๋“ค๊นŒ์ง€ ์ˆœ์„œ๋Œ€๋กœ ๋”ฐ๋ผ๊ฐ€๋ด…์‹œ๋‹ค!

๊ฐœ์ธํ‚ค ์ƒ์„ฑ

$ openssl genpkey -algorithm RSA -out private.key
$ cat private.key
-----BEGIN PRIVATE KEY-----
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDCFhKZB1BgIYNe
B+hywiTR2/13lA3s3/SZo1wnScVpaOI6aJmi4l0AnLEW7BqyCNCJ63MYARWMZ8cM
...
OoLGksEA5fkakzu8IOeGpl6/
-----END PRIVATE KEY-----

openssl genrsa๋กœ๋„ ๊ฐœ์ธํ‚ค๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ openssl genrsa -out private.key 2048

๊ณต๊ฐœํ‚ค ์ถ”์ถœ

๊ทธ๋Ÿฐ๋ฐ SSL์„ ํ•˜๋ ค๋ฉด, ๊ฐœ์ธํ‚ค์— ๋Œ€์‘๋˜๋Š” ๊ณต๊ฐœํ‚ค๊ฐ€ ํ•„์š” ํ–ˆ์Šต๋‹ˆ๋‹ค. ์œ„์˜ ๋ช…๋ น์–ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด, ๊ฐœ์ธํ‚ค์ธ private.key๋งŒ ์ƒ์„ฑ๋˜๊ณ , ๊ณต๊ฐœํ‚ค๋Š” ์ƒ์„ฑ๋˜์ง€ ์•Š๋Š”๋ฐ์š”! ์–ด๋””์— ์žˆ๋Š” ๊ฑธ๊นŒ์š”?

์ •๋‹ต์€ ๊ฐœ์ธํ‚ค ์•ˆ์— ๊ณต๊ฐœํ‚ค์˜ ๋‚ด์šฉ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜ฒ ๊ณต๊ฐœํ‚ค์˜ ๊ฐ’๋„ openssl๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ openssl rsa -in private.key -pubout -out public.key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwhYSmQdQYCGDXgfocsIk
0dv9d5QN7N/0maNcJ0nFaWjiOmiZouJdAJyxFuwasgjQietzGAEVjGfHDCIp9Yes
GraHOHGJzoDRXKTiR7CY6l90vevyyD9pJSSCThifST23wsjAlIOnBBmdDcbrHWB0
DoU7x33sQwUMWVRWCn7cZR4vaCEn7Fr3YeKpcjXz/woPpr1r9nm2V0oX31YxEt69
TK7GeJQaMNwmfy4acJFyU+a25u0Cf5bz/U+HaWu2Qx0WKaF9CO3bvV2h105A+ARV
fReKr/uWA1jYw/bOo0BAvQzuakRIvQMVJKc1rYnS9lBN5BeT6MYpMsODLqld4sdu
iwIDAQAB
-----END PUBLIC KEY-----

์™œ ๊ณต๊ฐœํ‚ค๋Š” ๊ฐœ์ธํ‚ค์—์„œ ์ถ”์ถœํ•ด์•ผ ํ• ๊นŒ์š”?

๊ทธ ์ด์œ ๋Š” ๊ฐœ์ธํ‚ค์™€ ๊ณต๊ฐœํ‚ค๋Š” ์„œ๋กœ ์ˆ˜ํ•™์ ์œผ๋กœ ๊ฐ•ํ•˜๊ฒŒ ์—ฐ๊ฒฐ ๋˜์–ด ์žˆ์–ด์„œ, ๊ณต๊ฐœํ‚ค์˜ ๊ฐ’์„ ๊ฐœ์ธํ‚ค๋งŒ์œผ๋กœ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐœํ‚ค์—๋Š” ๊ฐœ์ธํ‚ค๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๊ฐ€ ๋ˆ„๋ฝ ๋˜์–ด ์žˆ์ง€๋งŒ, ๊ฐœ์ธํ‚ค์—๋Š” ๊ณต๊ฐœํ‚ค๋ฅผ ์ถ”์ถœํ•˜๊ธฐ ์œ„ํ•œ ์ •๋ณด๊นŒ์ง€ ํ•จ๊ป˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ ‡๊ฒŒ ๊ฐœ์ธํ‚ค๋ฅผ ํ†ตํ•ด ๊ณต๊ฐœํ‚ค๋ฅผ ์ถ”์ถœํ•˜๋„๋ก ํ•˜๋ฉด, ์„œ๋ฒ„๋Š” ๊ฐœ์ธํ‚ค๋งŒ ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค! ๊ทธ๋ฆฌ๊ณ  ๊ณต๊ฐœํ‚ค๋Š” ํ•„์š”ํ•  ๋•Œ openssl๋กœ ์ƒ์„ฑํ•ด์„œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

CSR ์ƒ์„ฑ

์„œ๋ฒ„๊ฐ€ ๊ฐ€์ง„ ๊ณต๊ฐœํ‚ค์— ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ์ฆ์„œ(certificate)๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ธ์ฆ์„œ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„  ์ธ์ฆ๊ธฐ๊ด€(CA)์—๊ฒŒ ์„œ๋ฒ„ ๊ณต๊ฐœํ‚ค์™€ ์„œ๋ฒ„์˜ ์ •๋ณด๋ฅผ ํฌํ•จํ•œ ์ธ์ฆ์„œ ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ(Certificate Signing Request)๋ฅผ ์ƒ์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

openssl req ๋ช…๋ น์–ด์— -new๋ฅผ ๋ถ™์—ฌ์„œ ์‹ ๊ทœ CSR๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ํ•ฉ์‹œ๋‹ค! ์ด๋ ‡๊ฒŒ ๋งŒ๋“ค์–ด์ง„ .csr ํŒŒ์ผ์„ ์ธ์ฆ๊ธฐ๊ด€(CA)์— ๋ณด๋‚ด์„œ ์„œ๋ช…์„ ๋ฐ›์„ ์˜ˆ์ • ์ž…๋‹ˆ๋‹ค!

$ openssl req -new -key private.key -out request.csr

You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]: .
State or Province Name (full name) [Some-State]: .
Locality Name (eg, city) []: .
Organization Name (eg, company) [Internet Widgits Pty Ltd]: .
Organizational Unit Name (eg, section) []: .
Common Name (e.g. server FQDN or YOUR name) []: localhost
Email Address []: .

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

.csr์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ๋ช‡๊ฐ€์ง€ ๋ฉ”ํƒ€ ์ •๋ณด๋ฅผ ์ฑ„์›Œ์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋“  ํ•„๋“œ๋ฅผ ๋‹ค ์ ์„ ํ•„์š”๋Š” ์—†์Šต๋‹ˆ๋‹ค! Common Name(CN) ํ•ญ๋ชฉ์„ ๊ผญ ์ •ํ™•ํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. ์™œ๋ƒํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €๊ฐ€ SSL ์ธ์ฆ์„œ๋ฅผ ๊ฒ€์ฆํ•  ๋•Œ, CN ๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ๊ฒ€์ฆํ•˜๊ธฐ ๋•Œ๋ฌธ ์ž…๋‹ˆ๋‹ค!

์ €๋Š” CN์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ „๋ถ€ .์„ ๋„ฃ์–ด์„œ ๋นˆ๊ฐ’์œผ๋กœ ๋„ฃ์–ด์คฌ์Šต๋‹ˆ๋‹ค!

CN ํ•„๋“œ๋Š” ๋ณดํ†ต ์„œ๋ฒ„์—์„œ ์‚ฌ์šฉํ•  ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค. www.example.com์œผ๋กœ FQDN์„ ์ ์–ด๋„ ๋˜๊ณ , *.example.com์™€ ๊ฐ™์ด RegExp๋ฅผ ํฌํ•จํ•ด ์ž‘์„ฑํ•ด๋„ ๋ฉ๋‹ˆ๋‹ค.

Self-signed Certificate ์ƒ์„ฑ

์ด์ œ ์•ž์—์„œ ๋งŒ๋“  .csr ํŒŒ์ผ์„ ์„œ๋ฒ„๊ฐ€ ์ž์ฒด์ ์œผ๋กœ ์„œ๋ช…ํ•˜๋Š” Self-signed Certificate๋ฅผ ๋งŒ๋“ค์–ด๋ด…์‹œ๋‹ค!

$ openssl x509 -req -in request.csr -days 365 \
    -signkey private.key \
    -out certificate.crt

Certificate request self-signature ok
subject=CN=localhost

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์šด์˜ ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜๋Š” ์—†์Šต๋‹ˆ๋‹ค! ์™œ๋ƒํ•˜๋ฉด, ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž์ฒด ์„œ๋ช…ํ•œ ์ธ์ฆ์„œ๋Š” ์‹ ๋ขฐํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์›น์„œ๋ฒ„๊ฐ€ ์ด ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ์“ฐ๊ฒŒ ๋˜๋ฉด https://localhost:0000์œผ๋กœ ์ ‘๊ทผ์€ ๋˜์ง€๋งŒ, โ€œ์‹ ๋ขฐํ•  ์ˆ˜ ์—†์Œโ€ ๊ฒฝ๊ณ ๊ฐ€ ๋œจ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

๋ฌผ๋ก  ๋กœ์ปฌ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ์ด๋ฅผ ๋ฌด์‹œํ•˜๊ณ  ์ง„ํ–‰ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹คโ€ฆ๋งŒ! ์ €๋Š” ์ด๊ฒŒ ๋„ˆ๋ฌด ๊ฑฐ์Šฌ๋ ค์„œ ๋กœ์ปฌ์—์„œ ๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ๋ฅผ ๊ฒฝ๊ณ  ๋ฌธ๊ตฌ ์—†์ด๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ฐพ์•„์„œ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค! ๐Ÿ˜Š

โžก๏ธ FastAPI with Self-signed SSL Certificate


๊ทธ๋ฆฌ๊ณ  ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ์˜ ๊ฒฝ์šฐ, ์–ด์งœํ”ผ ์ž๊ธฐ ์ž์‹ ์ด ์„œ๋ช…ํ•  ๊ฒƒ์ด๊ธฐ ๋•Œ๋ฌธ์— .csr ํŒŒ์ผ์„ ๊ตณ์ด ๋งŒ๋“ค์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค ใ…‹ใ…‹ ๊ทธ๋ž˜์„œ openssl req -new๋กœ ์ธ์ฆ์„œ ์„œ๋ช… ์š”์ฒญ์„ ๋งŒ๋“ค๊ธฐ ์•Š๊ณ  openssl req -x509๋กœ ๋ฐ”๋กœ .crt ํŒŒ์ผ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅ ํ•ฉ๋‹ˆ๋‹ค.

$ openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 3650 -out rootCA.crt \
  -subj "/C=KR/ST=Seoul/L=Seoul/O=MyOrg/OU=Dev/CN=MyLocalRootCA"

์‚ฌ๋‚ด ํ์‡„ ์‹œ์Šคํ…œ์—์„œ ์‚ฌ์šฉ

์ด ๋ถ€๋ถ„์ด ์ด ๊ธ€์„ ์“ฐ๊ฒŒ ๋œ ๊ณ„๊ธฐ ์ž…๋‹ˆ๋‹ค!! ใ…Žใ…Ž

์™ธ๋ถ€ CA์— ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์ด ์–ด๋ ค์šด ๋‚ด๋ถ€์šฉ ์„œ๋น„์Šค ๋˜๋Š” ํ์‡„๋ง์—์„œ๋„ SSL/TLS๋ฅผ ํ†ตํ•œ ์ „์†ก ์•”ํ˜ธํ™”๋Š” ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ ์ž์ฒด ์„œ๋ช…์„ ํ•œ ์ธ์ฆ์„œ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฃจํŠธ CA๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ด๋ฃจ๋Š” ๋ชจ๋“  ์„œ๋ฒ„์— ๋ฐฐํฌํ•˜๊ณ , ์ด๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ๊ตฌ์„ฑ ํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ํšŒ์‚ฌ์—์„œ Kafka ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ, ์ด ์ž์ฒด ์„œ๋ช… ์ธ์ฆ์„œ๋ฅผ ๋ฃจํŠธ CA๋กœ ๊ตฌ์„ฑํ•ด์„œ ์‚ฌ์šฉ ํ–ˆ์Šต๋‹ˆ๋‹ค ใ…Žใ…Ž

๋น„๋ฐ€๋ฒˆํ˜ธ ์ƒ์„ฑ

openssl๋กœ ํ‚ค์™€ ์ธ์ฆ์„œ ๋„๊ตฌ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ, ์ž„์˜์˜ ๊ฐ•๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค!

$ openssl rand 12 | base64
JsQa64t5++7tQ/l+

$ openssl rand -base64 12
GKgjDe3Hmiwvu+vW

์ด๋ ‡๊ฒŒ ๋งŒ๋“  ๊ฐ’๋“ค์„ admin ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋‚˜ ํ† ํฐ ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค!

OpenSSH์™€ ํ—ท๊ฐˆ๋ฆฌ์ง€ ๋ง๊ธฐ!

๋‘˜์ด ์ด๋ฆ„์ด ์—„์ฒญ ๋น„์Šทํ•ฉ๋‹ˆ๋‹คโ€ฆ ๐Ÿ˜… ๊ทธ๋ž˜์„œ ์ €๋Š” ์ฒ˜์Œ์—

SSH์—์„œ๋„ .pem ํ‚ค๋ฅผ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ–ˆ๋Š”๋ฐโ€ฆ? ์ด๊ฑฐ๋ž‘ ๋‹ค๋ฅธ ๊ฑด๊ฐ€?

๋ผ๊ณ  ์ƒ๊ฐ ํ–ˆ์ฃ .

์ผ๋‹จ ๊ฐ€์žฅ ํฐ ์ฐจ์ด์ ์€ OpenSSL์€ openssl๋ผ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ์˜ CLI๋ฅผ ์‚ฌ์šฉํ•˜์ง€๋งŒ, OpenSSH์—์„œ๋Š” ssh๋‚˜ ssh-keygen๊ณผ ๊ฐ™์€ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋„ˆ๋ฌด ์„ฑ์˜๊ฐ€ ์—†๋Š” ์ฐจ์ด์ธ๊ฐ€โ€ฆ?

์•”ํŠผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์€ ๊ฒƒ์€ OpenSSH๋Š” SSH ๋ณด์•ˆ ์ ‘์†์„ ์œ„ํ•œ ์ „๋ฐ˜์ ์ธ ์‹œ์Šคํ…œ์ด๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ทธ ๊ณผ์ •์—์„œ OpenSSL๊ณผ ๊ฒน์น˜๋Š” ๋ถ€๋ถ„์ด ๋งŽ์Šต๋‹ˆ๋‹ค. ๋‘˜๋‹ค .pem ํฌ๋งท์œผ๋กœ ํ‚ค๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค๋Š” ์ . ๊ทธ๋ฆฌ๊ณ  ์•”ํ˜ธํ™” ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ RSA ์•Œ๊ณ ๋ฆฌ์ฆ˜ ๋“ฑ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ, OpenSSL์€ x.509๋ผ๋Š” ๋””์ง€ํ„ธ ์ธ์ฆ์„œ๊ณผ ์ธ์ฆ์„œ ๊ธฐ๋ฐ˜ ์ฒด๊ณ„(PKI)์— ์ค‘์š”ํ•˜๋‹ค๋ฉด, OpenSSH๋Š” ์„œ๋ฒ„์— ์›๊ฒฉ ์ ‘์†ํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด๋ผ๋Š” ์ ์ด ๋” ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

keytool

TODO