๊ฐ๋ฐ ๋ฐ ํ ์คํธ ํ๊ฒฝ์ HTTPS ๊ตฌํ์ ์ํด OpenSSL๋ก ์ฌ์ค ์ธ์ฆ์๋ฅผ ์์ฑํ๋ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํฉ๋๋ค. ์ค๋ฌด์์ ํผ๋ํ๊ธฐ ์ฌ์ด Key, CSR, CRT ํ์ผ์ ์ ํํ ์ญํ ์ ์๋ถํฐ, ๊ฐ์ธํค ํจ์ค์๋ ์ ๊ฑฐ ๋ฐ Apache ์ ์ฉ๊น์ง์ ์ ์ฒด ํ๋ก์ธ์ค๋ฅผ ๋ค๋ฃน๋๋ค.
0. ๋ฐฐ๊ฒฝ ์ง์: ์ธ์ฆ์ ํ์ผ์ ์ข ๋ฅ์ ์ญํ
SSL ์ธ์ฆ์ ๋ฐ๊ธ ๊ณผ์ ์ ๊ฐ์ธํค ์์ฑ → ์ธ์ฆ ์์ฒญ(CSR) → ์ธ์ฆ์ ๋ฐ๊ธ(CRT)์ ์์๋ก ์งํ๋ฉ๋๋ค. ๊ฐ ๋จ๊ณ์์ ์์ฑ๋๋ ํ์ผ์ ์ญํ ์ ๋ช ํํ ์ดํดํด์ผ ํฉ๋๋ค.
- 1. Private Key (
.key):- ์๋ฒ๊ฐ ๊ฐ๋ ๋น๋ฐ ์ด์ ์ ๋๋ค. ๋ฐ์ดํฐ๋ฅผ ์ํธํ/๋ณตํธํํ๋ ํต์ฌ ํ์ผ๋ก, ์ ๋ ์ธ๋ถ๋ก ์ ์ถ๋์ด์๋ ์ ๋ฉ๋๋ค.
- ์ด ํค๋ฅผ ๋ถ์คํ๋ฉด ์ธ์ฆ์๋ฅผ ์ฌ๋ฐ๊ธ๋ฐ์์ผ ํฉ๋๋ค.
- 2. CSR (
.csr- Certificate Signing Request):- ์ธ์ฆ ๊ธฐ๊ด(CA)์ "๋ด ์ธ์ฆ์๋ฅผ ๋ง๋ค์ด ๋ฌ๋ผ"๊ณ ๋ณด๋ด๋ ์ ์ฒญ์์ ๋๋ค.
- ๊ณต๊ฐํค(Public Key) ์ ๋ณด์ ๋๋ฉ์ธ, ํ์ฌ ์ ๋ณด(DN)๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
- 3. Certificate (
.crt):- ์ต์ข ์ ์ผ๋ก ๋ฐ๊ธ๋ ์ธ์ฆ์(์ ๋ถ์ฆ)์ ๋๋ค.
- CSR ๋ด์ฉ์ ๋ฐํ์ผ๋ก CA(ํน์ ๋ณธ์ธ)๊ฐ ์ ์ ์๋ช ์ ํ ํ์ผ์ด๋ฉฐ, ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์๊ฒ ์ ์ก๋ฉ๋๋ค.
Test Environment
- OS: CentOS 7.2
- Web Server: Apache HTTP Server
- Tool: OpenSSL
1. ๊ฐ์ธํค(Private Key) ์์ฑ
๊ฐ์ฅ ๋จผ์ ๋ชจ๋ ์ํธํ ํต์ ์ ๊ธฐ๋ฐ์ด ๋๋ ๊ฐ์ธํค๋ฅผ ์์ฑํฉ๋๋ค.
1) ์ํธํ๋ ๊ฐ์ธํค ์์ฑ
des3 ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ 2048๋นํธ ๊ธธ์ด์ RSA ํค๋ฅผ ์์ฑํฉ๋๋ค. ์ด๋ ์ค์ ํ๋ ํจ์ค์๋(Pass Phrase)๋ ํค๋ฅผ ๋ณดํธํ๊ธฐ ์ํ ์ฅ์น์
๋๋ค.
[root@web01 test]# openssl genrsa -des3 -out test.vn.key 2048
Generating RSA private key, 2048 bit long modulus
..........................+++
e is 65537 (0x10001)
Enter pass phrase for test.vn.key: [ํจ์ค์๋ ์
๋ ฅ]
Verifying - Enter pass phrase for test.vn.key: [ํจ์ค์๋ ํ์ธ]
2) ๊ฐ์ธํค ํจ์ค์๋ ์ ๊ฑฐ (ํ์ ๊ถ์ฅ)
ํจ์ค์๋๊ฐ ๊ฑธ๋ฆฐ ํค๋ฅผ ์น ์๋ฒ์ ๊ทธ๋๋ก ์ ์ฉํ๋ฉด, ์๋ฒ๊ฐ ์ฌ๊ธฐ๋๋ ๋๋ง๋ค ๊ด๋ฆฌ์๊ฐ ๋งค๋ฒ ํจ์ค์๋๋ฅผ ์ ๋ ฅํด์ผ ํฉ๋๋ค. ์๋ ์ด์์ ์ํด ํจ์ค์๋๋ฅผ ์ ๊ฑฐํ ํค๋ฅผ ๋ค์ ์์ฑํฉ๋๋ค.
# 1. ์๋ณธ ํค ๋ฐฑ์
cp test.vn.key test.vn.key.orig
# 2. ํจ์ค์๋๊ฐ ์ ๊ฑฐ๋ ํค ์์ฑ (๋ฎ์ด์ฐ๊ธฐ)
openssl rsa -in test.vn.key.orig -out test.vn.key
# ๊ฒฐ๊ณผ ๋ฉ์์ง
Enter pass phrase for test.vn.key.orig: [๊ธฐ์กด ํจ์ค์๋ ์
๋ ฅ]
writing RSA key
2. ์ธ์ฆ ์์ฒญ์(CSR) ์์ฑ
์์ฑ๋ ๊ฐ์ธํค(.key)๋ฅผ ๋ฐํ์ผ๋ก ์ธ์ฆ์ ๋ฐ๊ธ ์ ์ฒญ์(.csr)๋ฅผ ์์ฑํฉ๋๋ค.
CSR ์์ฑ ๋ช ๋ น์ด
openssl req -new -key test.vn.key -out test.vn.csr
์ฃผ์ ์ ๋ ฅ ์ ๋ณด (DN: Distinguished Name)
๋ช ๋ น ์คํ ํ ์ ๋ ฅํด์ผ ํ ์ ๋ณด์ ๋๋ค. ๋ค๋ฅธ ์ ๋ณด๋ ์์๋ก ์ ๋ ฅํด๋ ๋์ง๋ง, Common Name์ ๋ฐ๋์ ์ ํํด์ผ ํฉ๋๋ค.
- Country Name: ๊ตญ๊ฐ ์ฝ๋ (์: KR, VN)
- State / Locality: ์ง์ญ ์ ๋ณด (์: Seoul)
- Organization: ํ์ฌ๋ช /๋ถ์๋ช (์: IT Team)
- Common Name (CN): ์๋น์ค ๋๋ฉ์ธ ์ฃผ์ (๊ฐ์ฅ ์ค์! ์: *.test.vn)
3. ์ฌ์ค ์ธ์ฆ์(CRT) ์์ฑ (Self-Signing)
์ฐ๋ฆฌ๋ ๊ณต์ธ ์ธ์ฆ ๊ธฐ๊ด(VeriSign ๋ฑ)์ด ์์ผ๋ฏ๋ก, ์์ฑํ CSR์ ๋ด ๊ฐ์ธํค๋ก ์ง์ ์๋ช (Self-Sign)ํ์ฌ ์ธ์ฆ์(CRT)๋ฅผ ๋ง๋ญ๋๋ค.
์ธ์ฆ์ ์์ฑ
์ ํจ๊ธฐ๊ฐ์ 365์ผ๋ก ์ค์ ํ์ฌ ์ต์ข ์ธ์ฆ์๋ฅผ ์์ฑํฉ๋๋ค.
# -req : CSR์ ์
๋ ฅ๋ฐ์
# -signkey : ์ค์ค๋ก ์๋ช
ํ ํค ์ง์
openssl x509 -req -days 365 -in test.vn.csr -signkey test.vn.key -out test.vn.crt
# ์ฑ๊ณต ์ ์ถ๋ ฅ ๋ฉ์์ง
Signature ok
subject=/C=VN/ST=Hanoi/L=lotte/O=admin/OU=admin/CN=*.test.vn
Getting Private key
์ต์ข ํ์ผ ํ์ธ
์์ ์ด ์๋ฃ๋๋ฉด ๋ค์ 3๊ฐ์ ํ์ผ์ด ์์ด์ผ ํฉ๋๋ค.
test.vn.key: ๊ฐ์ธํค (ํจ์ค์๋ ์ ๊ฑฐ๋จ, ์๋ฒ ์ค์ ์ ์ฌ์ฉ)test.vn.crt: ์ธ์ฆ์ (์๋ฒ ์ค์ ์ ์ฌ์ฉ)test.vn.csr: ์ ์ฒญ์ (๋ฐ๊ธ ์๋ฃ ํ์๋ ๋ถํ์)
4. Apache ์ค์ ๋ฐ ๊ฒ์ฆ
์์ฑ๋ ํค์ ์ธ์ฆ์๋ฅผ Apache ์ค์ ํ์ผ(httpd.conf ๋๋ ssl.conf)์ ๋ฑ๋กํ์ฌ HTTPS๋ฅผ ํ์ฑํํฉ๋๋ค.
์ค์ ์ ์ฉ
# SSL ์์ง ํ์ฑํ
SSLEngine on
# 1. ์ธ์ฆ์ ํ์ผ ๊ฒฝ๋ก ์ง์ (.crt)
SSLCertificateFile /etc/httpd/conf/ssl/test.vn.crt
# 2. ๊ฐ์ธํค ํ์ผ ๊ฒฝ๋ก ์ง์ (.key)
SSLCertificateKeyFile /etc/httpd/conf/ssl/test.vn.key
๊ฒ์ฆ (Verification)
Apache๋ฅผ ์ฌ๊ธฐ๋ํ๊ณ ๋ธ๋ผ์ฐ์ ๋ก ์ ์ํด ๋ด ๋๋ค. ํจ์ค์๋๋ฅผ ๋ฌป์ง ์๊ณ ๊ธฐ๋๋์ด์ผ ์ ์์ ๋๋ค.
- ์ฌ๊ธฐ๋:
systemctl restart httpd - ๋ธ๋ผ์ฐ์ ์ ์:
https://test.vn
์ฌ์ค ์ธ์ฆ์๋ ๋ธ๋ผ์ฐ์ ๊ฐ ์ ๋ขฐํ๋ ๊ธฐ๊ด(CA) ๋ชฉ๋ก์ ์์ผ๋ฏ๋ก, ์ ์ ์ "์ฃผ์ ์ํจ" ๋๋ "์์ ํ์ง ์์" ๊ฒฝ๊ณ ๊ฐ ๋จ๋ ๊ฒ์ด ์ ์์ ๋๋ค. ํ ์คํธ ํ๊ฒฝ์์๋ ์์ธ๋ฅผ ์ถ๊ฐํ์ฌ ์งํํ๋ฉด ๋ฉ๋๋ค.