[Nginx] SSL ์ ์ฉ (With Chain ์ธ์ฆ์)
๐ ๋๋ฉ์ธ SSL ์ธ์ฆ์ ์ ์ฉ
์ด๋ฒ์ ํ์ฌ ๋๋ฉ์ธ์ SSL ์ธ์ฆ์๊ฐ ์๋ก ๋ฐ๊ธ๋์ด ์ ์ฉํ๋ ค๋๋ฐ
๋ค๋ฅธ ๋ฐฉ์์ SSL์ ๊ตฌ์
ํ์๋์ง ์ถ๊ฐ๋ก Chain ์ธ์ฆ์๊ฐ ํจ๊ป ๋ฐ๊ธ๋์๋ค.
Nginx์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ฐพ์ผ๋ฉฐ ์์งํ ์ ๋ณด๋ฅผ ๊ธฐ๋กํ๋ ๊ฒธ ๊ธฐ์กด์ SSL ์ ์ฉ๋ฒ๊น์ง ์ ๋ฆฌํด๋ณด๋ ค ํ๋ค.
๐ Nginx SSL ์ค์
๊ธฐ์กด์ ์ด์ฉํ๋ ์
์ฒด์์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ ๊ฒฝ์ฐ, ๋ณดํต crt
ํ์ผ์ ์ ๋ฌ๋ฐ๊ฒ ๋๋ค.
์ฐ๋ฆฌ๋ ์ด ํ์ผ์ pem
ํ์ผ๋ก ๋ณํํด์ผ ํ๋ค.
(๊ฐ๋น์๋ nginx ์ ์ฉ pem ํ์ผ์ ์ ๋ฌํด์ค๊ฑฐ๊ฐ๊ธฐ๋ ํ๊ณ ..)
๐ฅ Chain ์ธ์ฆ์๊ฐ ์์ ๊ฒฝ์ฐ
Chain ์ธ์ฆ์?
Chain ์ธ์ฆ์๋ Root ์ธ์ฆ์์ ๋๋ฉ์ธ ์ธ์ฆ์ ๊ฐ ์ฐ๊ฒฐ์ ์ธ์ฆํด์ฃผ๋ ์ธ์ฆ์๋ผ๊ณ ํ๋ค.
์ธ์ฆ์๋ฅผ ์ ๋ฌ๋ฐ์ผ๋ฉด ์๋ง Root ์ธ์ฆ์, Chain ์ธ์ฆ์, Domain ์ธ์ฆ์, Key ํ์ผ ์ด 4๊ฐ๋ฅผ ์ ๋ฌ๋ฐ์ ์ ์๋ค.
์ ๋ฌ๋ฐ์ ํ์ผ๋ค์ ํ๋์ crt
์ธ์ฆ์ ํ์ผ๋ก ํฉ์ณ์ผ ํ๋ค.
# Linux
cat Domain์ธ์ฆ์.crt Chain์ธ์ฆ์.crt Root์ธ์ฆ์.crt > bundle.crt
# Windows๋ ๋ฉ๋ชจ์ฅ์ผ๋ก ๊ฐ ํ์ผ์ ๋ด์ฉ์ ํ๋๋ก ํฉ์น๋ฉด ๋๋ค.
ํฉ์น๊ณ ๋ ์ดํ, ์๋์ ๊ฐ์ด ์ธ์ฆ์ ๊ตฌ๋ถ(๊ฐํ)์ด ์ ๋๋ก ์ ์ฉ๋์ด ์๋์ง ํ์ธํด์ผ ํ๋ค.
# ์๋ชป๋ ๊ฒฝ์ฐ
-----END CERTIFICATE----------BEGIN CERTIFICATE-----
# ์ฌ๋ฐ๋ฅธ ๊ฒฝ์ฐ
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
๐ฅ CRT ํ์ผ์ PEM์ผ๋ก ๋ณํ
Root , Chain, Domain ์ธ์ฆ์ ๋ณํฉ๋ณธ์ nginx์ ์ ์ฉํ ๊ฒฝ์ฐ ์ ๋๋ก ์ ์ฉ๋์ง ์๋ ํ์์ด ์๋ค.
์๋์์๋ ๋ฐฉ๋ฒ๋ง ์ค๋ช ํ๊ณ , ์ค์ conf์๋ crt๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ฉํ๋ค.
์ฐ์ ํ์ผ์ ๋ณํํ๊ธฐ ์ํด์๋ openssl
์ ์ด์ฉํ๋ค.
(์ค์น ๋ฐฉ๋ฒ์ ๋ฐ๋ก ์ ๋ฆฌํ๊ฒ ๋ค.)
์ ๋ฌ๋ฐ์ crt
ํ์ผ (๋๋ ๋ณํํ crt
ํ์ผ)์ ์๋ ๋ช
๋ น์ด๋ก pem
์ผ๋ก ๋ณํํ ์ ์๋ค.
# ์ ๋ฌ๋ฐ์ crt (ํน์ ๋ณํํ crt) : bundle.crt
openssl x509 -inform PEM -in bundle.crt > bundle.pem
key ํ์ผ์ ์ ์ฉํด๋ณธ ๊ฒฐ๊ณผ pem
์ผ๋ก ๋ณํํ์ง ์์๋ ํฐ ๋ฌธ์ ๋ ์์์ง๋ง,
ํน์ ๋ชจ๋ฅด๋ ์ผ๋จ ๊ธฐ๋กํด๋ณธ๋ค.
openssl rsa -in bundle.key -text > bundle.key.pem
๐ฅ Nginx SSL ์ค์
์ด์ nginx์ค์ ๋ง ๋ฐ๊พธ๋ฉด ๋๋๋ค.
SSL ์ค์ ์ ๊ฐ ๋๋ฉ์ธ์ server
์นํฐ์์ ๋ณ๊ฒฝํ ์ ์๋ค.
conf.d
๋ถ๋ฆฌ๋ฅผ ํด๋์ง ์์๋ค๋ฉด nginx.conf
์์, ๋ถ๋ฆฌ๋ฅผ ํด๋์๋ค๋ฉด ํด๋น ํ์ผ์์ ์์ ํ๋ฉด ๋๋ค.
๊ธฐ์กด ์ค์ ์ ์๋์ ๊ฐ์ด server_name์ ํด๋น ๋๋ฉ์ธ์ด ๋ค์ด๊ฐ ์ํ๋ก ์ ์ฉ๋์ด ์์ ๊ฒ์ด๋ค.
server {
listen 80;
listen [::]:80;
server_name sample.co.kr;
location / {
}
}
ํด๋น ์ค์ ํ์ผ์ SSL์ ์ ์ฉ์์ผ๋ณด์.
server {
listen 443;
listen [::]:443;
server_name sample.co.kr;
location / {
}
ssl on;
# ssl_certificate [์ธ์ฆ์ ์ ์ฒด ๊ฒฝ๋ก]
# ssl_certificate /var/cert/bundle.pem;
ssl_certificate /var/cert/bundle.crt;
# ssl_certificate_key [Key ํ์ผ ์์น]
ssl_certificate_key /var/cert/bundle.key.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
}
# ์ผ๋ฐ HTTP๋ก ์ ์ ์ HTTPS๋ก Redirect ์ค์
server {
if ($host = sample.co.kr) {
return 301 https://$host$request_uri;
}
listen 80;
listen [::]:80;
server_name sample.co.kr;
return 404;
}
ssl_certificate
๋ก ์ธ์ฆ์ ํ์ผ์ ์ค์ ํ๊ณ , ssl_certificate_key
๋ก ์ธ์ฆ์ ๋น๋ฐํค๋ฅผ ์ค์ , ๊ธฐํ ์ค์ ์ ๋ง๋ฌด๋ฆฌํ๋ฉด SSL ์ ์ฉ์ด ์๋ฃ๋๋ค.
๐ ์ ์ฉ ํ ์คํธ
ํ ์คํธ๋ SSL ํ ์คํธ ์ฌ์ดํธ ์์ ๋ณธ์ธ์ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ ๋ ฅํ์ฌ ํ ์คํธํ ์ ์๋ค.
ํ ์คํธ ์, ์๋์ ๊ฐ์ด Chain์ด ๋ถ์์ ํ๋ค๋ ๋ฉ์ธ์ง๊ฐ ํ์๋ ์ ์๋ค.
)
ํด๋น ๋ฉ์ธ์ง๊ฐ ํ์๋ ๊ฒฝ์ฐ, ์์ ๋ฉ๋ชจํ ๋๋ก pem
๋์ ๋ณํ์ ๊ฑฐ์น์ง ์์ crt
ํ์ผ (Root + Chain + Domain crt)์ ์ ์ฉ์ํฌ ๊ฒฝ์ฐ ํด๊ฒฐ๋ฌ๋ค.
๐ ๋ง๋ฌด๋ฆฌ
์ ์ฝ๋๋ ์ด์ ์ ์์
ํ ์ฝ๋๋ฅผ ๋ฐํ์ผ๋ก ์์ฑ๋ ๊ฒ์ด๋ค.
๋ถ๋ช
๊ทธ๋ ssl_ciphers
๋ ๋ค๋ฅธ ์ค๋ฅ๊ฐ ์์ด ์ ์ฉํ๊ฒ์ธ๋ฐ..
์ ์ ์ฉํ๋์ง ๊ธฐ์ต์ด ์๋๋ค ใ
ssl ์์ธ ์ค์ ์ ๋ํ ์ค๋ช
์ ๋์ค์~