Manual/OpenSSL

[OpenSSL] RSA์šฉ RootCA ์ƒ์„ฑ ๋ฐ SSL ์ธ์ฆ์„œ ๋งŒ๋“ค๊ธฐ

JayKim๐Ÿ™‚ 2023. 4. 7. 11:02

RSA ์šฉ SSL ์ธ์ฆ์„œ๋ฅผ ๋งŒ๋“ค๊ธฐ๋ฅผ ํ•ด๋ณด์ž
๋จผ์ € ์ตœ์ƒ์œ„ ์ธ์ฆ์„œ์ธ RootCA ์ธ์ฆ์„œ๋ฅผ ๋จผ์ € ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค.

์ตœ์ƒ์œ„ ์ธ์ฆ์„œ๋Š” Self Signed ์ธ์ฆ์„œ ์ด๋‹ค.
์ฆ‰ ์ž์‹ ์˜ ๊ฐœ์ธํ‚ค๋กœ ์„œ๋ช…ํ•œ ์ธ์ฆ์„œ๊ฐ€ Self Signed ์ธ์ฆ์„œ ์ด๋‹ค.

์‚ฌ์‹ค ์ž์ฒด์ ์œผ๋กœ ๋งŒ๋“  ์ธ์ฆ์„œ๋Š” ๊ธฐ๋ณธ ๋ธŒ๋ผ์šฐ์ €์— ๋“ฑ๋ก์ด ๋˜์–ด ์žˆ์ง€ ์•Š์•„ ๊ฒฝ๊ณ ๋ฅผ ๋ณด์—ฌ ์ฃผ์ง€๋งŒ ํ…Œ์ŠคํŠธ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋‹ค ๋ณด๋ฉด OpenSSL ์ž์ฒด๊ฐ€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ์„ค์ • ํŒŒ์ผ(openssl.cnf) ํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ
์ด ์„ค์ •์ด ํ™•์ธ์ด ์•ˆ๋œ๋‹ค๋ฉด
" -config test_openssl.cnf" ์ด๋ ‡๊ฒŒ ์ง์ ‘ ์ง€์ •ํ•ด์„œ ์‚ฌ์šฉ ํ•˜๋ฉด ๋œ๋‹ค.

RootCA ์šฉ RSA ํ‚ค ์Œ ์ƒ์„ฑ

  • CA ๊ฐ€ ์‚ฌ์šฉํ•  RSA 2048 bits Key Pair ์ƒ์„ฑ
    openssl genrsa -out rsa_rootca.key 2048

CSR ( Certificate Signing Request ) ์ƒ์„ฑ

openssl req -new -key rsa_rootca.key -out rsa_rootca.csr

์ด ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ ํ•˜๋ฉด DN ๊ฐ’ ์ž…๋ ฅ์„ ์š”์ฒญํ•œ๋‹ค.

RootCA ๊ด€๋ จ ์„ค์ • ์ •๋ณด

[ req ]
default_bits            = 2048
default_md              = sha1
default_keyfile         = lesstif-rootca.key
distinguished_name      = req_distinguished_name
extensions             = v3_ca
req_extensions = v3_ca

[ v3_ca ]
basicConstraints       = critical, CA:TRUE, pathlen:0
subjectKeyIdentifier   = hash
##authorityKeyIdentifier = keyid:always, issuer:always
keyUsage               = keyCertSign, cRLSign
nsCertType             = sslCA, emailCA, objCA
[req_distinguished_name ]
countryName                     = Country Name (2 letter code)
countryName_default             = KR
countryName_min                 = 2
countryName_max                 = 2

RootCA ์šฉ ์ธ์ฆ์„œ ์ƒ์„ฑ

openssl x509 -req -days 3650 -extensions v3_ca -set_serial 1 -in rsa_rootca.csr -signkey rsa_rootca.key -out rsa_rootca.crt
  • extensions : openssl.cnf ์„ค์ • ํŒŒ์ผ์—์„œ [ v3_ca ] ์„ค์ • ๊ฐ’ ์‚ฌ์šฉ
  • set_serial : ์‹œ๋ฆฌ์–ผ ๋ฒˆํ˜ธ ๊ฐ’ ์„ค์ •

RootCA ์ธ์ฆ์„œ ์ •๋ณด ํ™•์ธ

openssl x509 -text -in rsa_rootca.crt

๋ฐœ๊ธ‰ ์ธ์ฆ์„œ RSA 2048 bit ํ‚ค ์Œ ์ƒ์„ฑ

openssl genrsa -out rsa_cert.key 2048

๋ฐœ๊ธ‰ ์ธ์ฆ์„œ CSR ์ƒ์„ฑ

openssl req -new -key rsa_cert.key -out rsa_cert.csr

์ธ์ฆ์„œ DN ์ •๋ณด๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.

RootCA๋ฅผ ์ด์šฉํ•œ 5๋…„ ์ž๋ฆฌ ์ธ์ฆ์„œ ๋ฐœ๊ธ‰

openssl x509 -req -days 1824 -extensions v3_user -in rsa_cert.csr -CA rsa_rootca.crt -CAcreateserial -CAkey rsa_rootca.key -out rsa_cert.crt
  • extensions : openssl.cnf ์„ค์ • ํŒŒ์ผ์—์„œ [ v3_user ] ์„ค์ • ๊ฐ’ ์‚ฌ์šฉ
  • CAcreateserial : ๋žœ๋คํ•œ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ ํ•œ๋‹ค.

openssl.cnf ์—์„œ v3_user ์˜ˆ์ œ

[ v3_user ]
# Extensions to add to a certificate request
basicConstraints = CA:FALSE
authorityKeyIdentifier = keyid,issuer
subjectKeyIdentifier = hash
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
## SSL ์šฉ ํ™•์žฅํ‚ค ํ•„๋“œ
extendedKeyUsage = serverAuth,clientAuth
subjectAltName          = @alt_names
[ alt_names]
## Subject AltName์˜ DNSName field์— SSL Host ์˜ ๋„๋ฉ”์ธ ์ด๋ฆ„์„ ์ ์–ด์ค€๋‹ค.
## ๋ฉ€ํ‹ฐ ๋„๋ฉ”์ธ์ผ ๊ฒฝ์šฐ *.test.com ์ฒ˜๋Ÿผ ์“ธ ์ˆ˜ ์žˆ๋‹ค.
DNS.1   = www.test.com
DNS.2   = test.com
DNS.3   = *.test.com

๋ฐœ๊ธ‰ํ•œ ์ธ์ฆ์„œ ์ •๋ณด ๋ณด๊ธฐ

openssl x509 -text -in rsa_cert.crt