4-11. SSL
4-11. SSL ๊ด๋ จ
์ด์ ๋ธ๋ผ์ฐ์ ์์ ๊ณ ์ IP ๋์ ๋๋ฉ์ธ์ ์ ๋ ฅํ์ฌ ์๋ฒ์ ์ ์ํ ์ ์๊ฒ ๋์๋ค.
์ด๋ฌํ ๊ฒฝ๊ณ ๋ฉ์์ง๊ฐ ๋ณด์ด๋ ์ด์ ๋ https://pybo.kr
์ด ์๋ http://pybo.kr
์ฒ๋ผ https๊ฐ ์๋ http ํ๋กํ ์ฝ์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ด๋ค. ๋ธ๋ผ์ฐ์ ๋ HTTPS ๊ฐ ์๋ HTTP ์ฌ์ฉ์ ํญ์ ์ด๋ฌํ ๊ฒฝ๊ณ ๋ฉ์์ง๋ฅผ ๋ณด์ฌ์ค๋ค.
http์ ๋ณด์๊ธฐ๋ฅ(SSL)์ ๋ํ ๊ฒ์ด https ํ๋กํ ์ฝ์ด๋ค.
HTTPS๊ฐ ํ์ํ ์ด์
HTTPS ๊ฐ ์๋ HTTP ํ๋กํ ์ฝ์ ์ฌ์ฉํ๋ฉด ๋ธ๋ผ์ฐ์ (ํด๋ผ์ด์ธํธ)์ SBB ์๋น์ค(์๋ฒ) ์ฌ์ด์ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๊ฐ ์ํธํ ๋์ง ์๋๋ค. ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๋คํธ์ํฌ ๊ฒฝ๋ก๋ ๋งค์ฐ ๋ณต์กํ๋ฐ ์ด ๊ณผ์ ์์ ๋๊ตฐ๊ฐ(ํด์ปค)๊ฐ ๋ฐ์ดํฐ๋ฅผ ํ์ณ๋ณด๋ ์ผ์ ์ด๋ ต์ง ์๋ค. ๋ฐ๋ผ์ ๋คํธ์ํฌ ๊ตฌ๊ฐ์์ ์ฃผ๊ณ ๋ฐ๋ ๋ฐ์ดํฐ๋ ๋ฐ๋์ ์ํธํ ํ์ฌ ๋ฐ์ดํฐ๊ฐ ๋ ธ์ถ๋๋๋ผ๋ ๋ฌด์จ ๋ด์ฉ์ธ์ง ์์ ์๊ฒ ํด์ผ ํ๋ค.
์ด๋ฌํ ์ญํ ์ ํ๋ ๊ฒ์ด ๋ฐ๋ก HTTP์ SSL(Secured Socket Layer) ๊ธฐ๋ฅ์ ๋ํ HTTPS ํ๋กํ ์ฝ์ด๋ค. ์ฐ๋ฆฌ๊ฐ ๋ง๋ SBB ์๋น์ค์ HTTPS ํ๋กํ ์ฝ์ ์ ๊ณตํ๊ธฐ ์ํด์๋ SSL ์ธ์ฆ์๊ฐ ํ์ํ๋ค. SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ๋ฐ์ Nginx์ ์ ์ฉํ๋ฉด HTTPS ํ๋กํ ์ฝ๋ก ์๋น์ค๋ฅผ ํ ์ ์๋ค.
SSL ์ธ์ฆ์ ๋ฐ๊ธ
SSL ์ธ์ฆ์๋ ์ธ์ฆ ๊ธฐ๊ด์์ ์ธ์ฆํ๋ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๋ฐ์์ผ ํ๋ค. ์๋ํ๋ฉด ๋ธ๋ผ์ฐ์ ์ ์ด๋ฏธ SSL ์ธ์ฆ์ ์ํ ์ธ์ฆ ๊ธฐ๊ด๋ค์ด ๋ฑ๋ก๋์ด ์๊ธฐ ๋๋ฌธ์ด๋ค.
์ธ์ฆ ๊ธฐ๊ด์ผ๋ก ๋ฑ๋ก๋์ง ์์ ๊ธฐ๊ด์์ ์ธ์ฆํ ์ธ์ฆ์๋ ์ธ์ ๋์ง ์๋๋ค.
๋ํ์ ์ธ ์ธ์ฆ ๊ธฐ๊ด์ผ๋ก๋ Comodo, Thawte, GeoTrust, DigiCert ๋ฑ์ด ์๋ค. ์ด๋ฌํ ์ธ์ฆ ๊ธฐ๊ด์์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธ ๋ฐ์ ์ ์๋ค. ํ์ง๋ง ์ด๋ฌํ ์ธ์ฆ ๊ธฐ๊ด์ SSL ์ธ์ฆ์๋ ์ ๋ฃ์ด๋ค. (์ธ์ฆ์์ ๊ฐ๊ฒฉ์ ์ธ์ฆ ๊ธฐ๊ด๋ณ๋ก ๋ค๋ฅด๋ค.)
์ด ์ฑ ์์๋ ๋ฌด๋ฃ๋ก SSL ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํด ์ฃผ๋ Let's Encrypt ์๋น์ค๋ฅผ ์ฌ์ฉํด ๋ณด์.
Let's Encrypt ์ธ์ฆ์ ์ค์น
์๋ฒ์ ์ ์ํํ ๋ค์๊ณผ ๊ฐ์ด certbot์ ์ค์นํ์.
sudo apt install certbot
sudo apt install python3-certbot-nginx
๊ทธ๋ฆฌ๊ณ ๋ค์์ฒ๋ผ Nginx ์น์๋ฒ์ ์ฌ์ฉํ Let's Encrypt์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ์.
sudo certbot certonly --nginx
#
# Saving debug log to /var/log/letsencrypt/letsencrypt.log
# Plugins selected: Authenticator nginx, Installer nginx
# Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel):
pahkey@gmail.com
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Please read the Terms of Service at
# https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must
# agree in order to register with the ACME server at
# https://acme-v02.api.letsencrypt.org/directory
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# (A)gree/(C)ancel:
a
#
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Would you be willing to share your email address with the Electronic Frontier
# Foundation, a founding partner of the Let's Encrypt project and the non-profit
# organization that develops Certbot? We'd like to send you email about our work
# encrypting the web, EFF news, campaigns, and ways to support digital freedom.
# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
# (Y)es/(N)o:
y
# No names were found in your configuration files. Please enter in your domain name(s) (comma and/or space separated)
# (Enter 'c' to cancel):
pybo.kr
#
# Obtaining a new certificate
# Performing the following challenges:
# http-01 challenge for pybo.kr
# Using default address 80 for authentication.
# Waiting for verification...
#
# (... ์๋ต ...)
์์๋๋ก ์ด๋ฉ์ผ์ฃผ์, ๋์ํจ(a
), ์(y
), ๋๋ฉ์ธ๋ช
(์:pybo.kr
)์ ์
๋ ฅํ์. ๊ทธ๋ฌ๋ฉด ๋ค์ ์์น์ ์ธ์ฆ์๊ฐ ์์ฑ๋๋ค.
- .
/etc/letsencrypt/live/pybo.kr/
fullchain.pem
- .
/etc/letsencrypt/live/pybo.kr/
privkey.pem
๋
ธ๋์์ผ๋ก ๋งํนํ pybo.kr
์ ์ฌ๋ฌ๋ถ์ ๋๋ฉ์ธ๋ช
์ผ๋ก ๋์ฒดํด์ผ ํจ์ ์ฃผ์ํ์.
Nginx ์ค์
์ด์ ์ค์นํ SSL ์ธ์ฆ์๋ฅผ Nginx์ ์ ์ฉํ๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด sbb ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ์.
ํ์ผ๋ช :
/etc/nginx/sites-available/
sbb
server {
listen 80;
server_name pybo.kr;
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name pybo.kr;
ssl_certificate /etc/letsencrypt/live/pybo.kr/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/pybo.kr/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
location / {
proxy_pass http://localhost:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
}
}
HTTP ์์ฒญ(80๋ฒ ํฌํธ)์ HTTPS(443๋ฒ ํฌํธ)๋ก ๋ฆฌ๋ค์ด๋ ํธ ํ๋๋ก ์ค์ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ค์นํ SSL ์ธ์ฆ์๋ฅผ ์ ์ฉํ๊ธฐ ์ํด SSL ๊ด๋ จ ์ค์ ๋ค์ ์ ์ฉํ๋ค.
์ ์ค์ ์์ ์ฌ์ฉํ ๋๋ฉ์ธ๋ช
pybo.kr
์ ์ฌ๋ฌ๋ถ์ ๋๋ฉ์ธ๋ช ์ผ๋ก ๋ฐ๊พธ์ด์ผ ํจ์ ์ฃผ์ํ์.
์ด์ ๊ฐ์ด Nginx ์ค์ ์ ๋ฐ๊พผํ์ ๋ค์๊ณผ ๊ฐ์ด Nginx๋ฅผ ์ฌ์์ํ์.
sudo systemctl restart nginx.service
SSL ๋ฐฉํ๋ฒฝ ์ค์
Nginx์ SSL์ ์ ์ฉํ๋ฉด SSL์ ํฌํธ์ธ 443๋ฒ ํฌํธ์ ๋ฐฉํ๋ฒฝ ํด์ ๊ฐ ํ์ํ๋ค. ๋ค์์ ์ฐธ๊ณ ํ์ฌ 443๋ฒ ํฌํธ์ ๋ฐฉํ๋ฒฝ์ ํด์ ํ์.
HTTPS ํ์ธ
์ด์ ๋ธ๋ผ์ฐ์ ์์ http://pybo.kr
๋์ https://pybo.kr
๋ก ์ ์ํ ์ ์๋ค. ๊ทธ๋ฆฌ๊ณ ์ด์ ์ ํ์๋๋ "์ฃผ์์ํจ" ๊ฒฝ๊ณ ๋ฉ์์ง๋ ์ฌ๋ผ์ง๊ณ ์ธ์ฆ์ ์๋ฏธํ๋ ์๋ฌผ์ ๋ชจ์์ ์์ด์ฝ๋ ํ์๋ ๊ฒ์ด๋ค.