๊ฐ์
certbot์ ํตํด ๋ฐ๊ธํ *.mydomain.com
์ด๋ผ๋ ์์ผ๋์นด๋ ์ฃผ์๊ฐ renew๋ก ๊ฐฑ์ ์ด ์ ๋ผ์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋์๋ค.
์์ผ๋์นด๋๋ ์๋ ๊ฐฑ์ ์ด ๊ฐ๋ฅํ๊ธด ํ๋ฐ ๊ณผ์ ์ด ๋๋ฌด ๋ณต์กํ์ฌ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ์ฐพ๊ฒ ๋์๊ณ , ์ด๋ฒ์ ๊ฐ์ฅ ๊น๋ํ ๋ฐฉ๋ฒ์ ์ ๋ฆฌํ๊ณ ์ ํ๋ค.
์๋ ๋ด์ฉ์ webํธ์คํ
, ํ๋ก์ ํธ์คํ
์ ์์๋ก ๋๊ณ ์๋ค.
๋ํ ๊ฐ๋น์ ๋ฑ ๋ณ๋๋ก ๋๋ฉ์ธ ๊ณต๊ธ์
์ฒด์์ ACME ์๋ ์ธ์ฆ์ ํตํ์ง ์์์ ๋ฒ๊ฑฐ๋ก์์ ์ค์ผ ์ ์๋ค.
ํ๊ฒฝ
- Ubuntu 22.04
- certbot
- nginx
- code-server (์ค์น๋์ด์์. 8080 ํฌํธ ์ฌ์ฉ)
์งํ
1. Certbot ์ค์นํ๊ธฐ
Ubuntu/Debian
sudo apt update
sudo apt install certbot
sudo apt install python3-certbot-nginx # Nginx์ acme์ฑ๋ฆฐ์ง๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ
sudo apt install python3-certbot-apache # Apache์ acme์ฑ๋ฆฐ์ง๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ
CentOS/RHEL
sudo yum install certbot
sudo yum install python3-certbot-nginx # Nginx์ acme์ฑ๋ฆฐ์ง๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ
sudo yum install python3-certbot-apache # Apache์ acme์ฑ๋ฆฐ์ง๋ฅผ ์ํ ํ๋ฌ๊ทธ์ธ
์์ ์์๋ apache๋ ์กด์ฌํ์ง๋ง, ๋ด๊ฐ ์๋ํ๋ ๋ฐฉ์์ nginx ์์ฃผ๋ก๋ง ์์ฑํ์๊ธฐ ๋๋ฌธ์ nginxํ๋ฌ๊ทธ์ธ์ ์ค์นํ๋๋ก ํ๋ค.
2. ์ธ์ฆ์ ๋ฐ๊ธํ๊ธฐ
!!!! ํด๋น ๋ฐฉ์์ ์งํํ๊ธฐ ์ ์ ๋ฌด์กฐ๊ฑด ๋๋ฉ์ธ ์ ๊ณต ์ ์ฒด์ ๋ด๊ฐ ์ฌ์ฉํ 1์ฐจ ๋๋ฉ์ธ mydomain.com, 2์ฐจ ๋๋ฉ์ธ second.mydomain.com ๋ฑ์ด ๋ฏธ๋ฆฌ ์ถ๊ฐ๊ฐ ๋์ด์์ด์ผ ํ๋ค!!!!
์๋ ๋ช ๋ น์ด๋ฅผ ํตํด SSL ๋ฐ๊ธ์ ์๋ํ๋ค.
sudo certbot certonly --nginx --cert-name mydomain.com -d mydomain.com -d www.mydomain.com -d code.mydomain.com
# mydomain.com๊ณผ www.mydomain.com๊ณผ code.mydomain.com์ ๋ํ ์ธ์ฆ์๋ฅผ izvillain.com์ด๋ผ๋ ์ด๋ฆ์ผ๋ก ํฉ์ณ์ ๋ฐ๊ธ
์ค๋ช
sudo certbot
: SSL์ ๋ฐ๊ธํ๊ณ ์ ์ฅํ ๋ Certbot์ด ์์คํ ๋๋ ํฐ๋ฆฌ์ ์ ๊ทผํ์ฌ ์์ ์ ์ํํ๊ธฐ ๋๋ฌธ์ sudo๊ถํ์ด ํ์certonly
: ํด๋น ์ต์ ์ด ์๋ค๋ฉด nginx๋ apache ํ๋ฌ๊ทธ์ธ์ ํตํด certbot์ด ์์์ ๋ง. confํ์ผ์ ์์ ํ๊ฒ ๋๋ค.--nginx
: ์ธ์ฆ ๋ฐฉ์ ์ค ์น์๋ฒ์ธ์ฆ๋ฐฉ์์ธ nginx๋ฅผ ์ ํ--cert-name
: ์ธ์ฆ์๋ค์ ๋ฌถ์ด๋ ๋ํ ์ด๋ฆ (๋์ค์ SSL ๋๋ ํฐ๋ฆฌ๊ฐ ํด๋น์ด๋ฆ์ผ๋ก ์์ฑ๋จ)-d
: ์ด๋ค ๋๋ฉ์ธ์ ๋ํ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ๊ฒ ์ธ์ง ์ ํ
3. Nginx Https(80 TO 443) ์๋ ์ ๊ทธ๋ ์ด๋ ๊ตฌ์ฑ
์ฌ๊ธฐ๊น์ง ์ ์งํํ๋ค๋ฉด SSL์ธ์ฆ์๋ /etc/letsencrypt/live/mydomain.com/
์ ์กด์ฌํ ๊ฒ์ด๋ค.
์ด์ ํ ์ผ์ Nginx ์น์๋ฒ๋ก ๋ค์ด์ค๋ ๋ชจ๋ ์์ฒญ์ https๋ก ์
๊ทธ๋ ์ด๋ํ๋๋ก ์ ๋ํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
์๋ ๋ช
๋ น์ด๋ฅผ ์
๋ ฅํ์ฌ, ๊ณต์ฉ http.conf
ํ์ผ์ ๋ง๋ค๋๋ก ํ์
cd /etc/nginx/sites-available
sudo vi http.conf
#shared http
server{
listen 80;
return 308 https://$host:443$request_uri; #๋ค์ด์ค๋ ๋ชจ๋ 80๋ฒ ํฌํธ ์์ฒญ์ ๋ํด 443์ผ๋ก ์
๊ทธ๋ ์ด๋
}
:wq
๋ก ์ ์ฅ ๋ฐ ๋์ค๊ธฐ
๋งํฌ ์์ฑ
sudo ln -s /etc/nginx/sites-available/http.conf /etc/nginx/sites-enabled/http.conf
nginx ์ ํจ์ฑ ๊ฒ์ฌ
sudo nginx -t
Success๊ฐ ์ ํ์๋๋ค๋ฉด ๋ฌธ์ ์๋ ์ํ๋ค.
4. SSL ์ ์ฉํ๊ธฐ
์กฐ๊ธ๋ง ๋ ํ๋ฉด ๊ธฐ์ด์์
์ ์๋ฃ๋๋ค.
์๋ ๋ช
๋ น์ด๋ฅผ ํตํด SSL์ ์ ์ฉํ ๋๋ฉ์ธ์ ๋ํ conf ํ์ผ์ ๋ง๋ค์ด์ฃผ๋๋ก ํ์.
sudo vi /etc/nginx/sites-available/mydomain.com.conf
์๋ .confํ์ผ ์์ 1๋ฒ๊ณผ 2๋ฒ์ ๊ฐ์ ์น์ฌ์ดํธ๋ก ๊ฐ๊ฒ ํ๋ ์์๊ณ ,
3๋ฒ์ ๋ณ๋๋ก ๋ด๋ถ์์ ํธ์คํ
ํ๋ ๋ค๋ฅธ ์๋ฒ๋ก ์ด๋ํ๊ฒ ํ๋ ์์๋ค.
๋์ ๊ฒฝ์ฐ๋ code-server๋ฅผ ๋ก์ปฌํฌํธ 8080์ผ๋ก ์ด๊ณ ,
3๋ฒ๊ณผ ๊ฐ์ด ๊ตฌ์ฑํ์ฌ ์ธ๋ถ์์๋ code.mydomain.com์ผ๋ก๋ง ์ ์ ๊ฐ๋ฅํ๊ฒ ์ฒ๋ฆฌ๋ฅผ ํ๋ค.
#mydomain.com์ ์ฌ์ฉํ๋ ๋ชจ๋ ํธ์คํ
๋ค
#1: ์นํธ์คํธ
server {
listen 443 ssl;
server_name mydomain.com; #1์ฐจ๋๋ฉ์ธ์ผ๋ก ๋ค์ด์ค๋ ์ฃผ์ ์บ์น
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; #
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
location / {
root /home/user/myweb/build/web; #ํธ์คํ
ํ ์น์ฌ์ดํธ ๊ฒฝ๋ก
index index.html; #์์ํ ์น์ฌ์ดํธ ์ธ๋ฑ์ค ํ์ผ
}
}
#2: ์นํธ์คํธ www์ ๋ํด ๊ฐ์ ๋ก mydomain.com์ผ๋ก ์ด๋
server {
listen 443 ssl;
server_name www.mydomain.com; #2์ฐจ ๋๋ฉ์ธ www๋ก ๋ค์ด์ค๋ ์ฃผ์ ์บ์น
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
return 301 https://mydomain.com$request_uri; #์ด๋์ํฌ ์ค์ ์ฃผ์
}
#3: ํ๋ก์ํธ์คํธ (๋๋ ๊ฐ์ํธ์คํธ)
server {
listen 443 ssl;
server_name code.mydomain.com; #2์ฐจ ๋๋ฉ์ธ code๋ก ๋ค์ด์ค๋ ์ฃผ์ ์บ์น
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
location / {
proxy_pass http://127.0.0.1:8080; #๋ก์ปฌ์์ ํธ์คํ
์ค์ธ ์ค์ ์ฃผ์
proxy_set_header Host code.mydomain.com; #๋ฐ๋์ ์์ฒญ URL ๊ณผ ๋์ผํ๊ฒ ์ ์ด์ผํจ (์ค๋ฅ๊ฐ ๋๋ค๋ฉด ๋๋ถ๋ถ ์ฌ๊ธฐ์ ๋ฌธ์ , ํฌํธ๋ ๋ถ์ฌ์ ์๋ํด๋ณด๊ธฐ)
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection upgrade;
#proxy_set_header Accept-Encoding gzip;
}
}
:wq
๋ก ์ ์ฅ ๋ฐ ๋์ค๊ธฐ
ํ์ํ๋ค๋ฉด server{} ํญ๋ชฉ์ ๋ ์ถ๊ฐํ์ฌ info.mydomain.com ๋๋ sample.mydomain.com ๊ฐ์ ๋ค์ํ 2์ฐจ ๋๋ฉ์ธ๋ ํธ์คํ ํ ์ ์๋ค.
๋งํฌ ์์ฑ
sudo ln -s /etc/nginx/sites-available/mydomain.com.conf /etc/nginx/sites-enabled/mydomain.com.conf
๋งํฌ๋ฅผ ์์ฑํ ์ด์ ๋ nginx ๊ธฐ๋ณธ ์ค์ ์ผ๋ก ์ธํด sites-enabled
ํด๋ ์์ ์๋ .conf
ํ์ผ๋ง ์ฝ์ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๋์ค์ ํด๋น ์ฌ์ดํธ๋ฅผ ์ ์ ์ ์ฐ๋ ค๋ฉด mydomain.com.conf.bak ์ผ๋ก ์ด๋ฆ๋ง ๋ฐ๊พธ๋ฉด ๋๋ค.
nginx ์ ํจ์ฑ ๊ฒ์ฌ
sudo nginx -t
Success ๊ฐ ์ ์ถ๋ ฅ๋๋ฉด ๋ฌธ์ ์์.
Nginx ์๋น์ค ์ฌ์์
sudo systemctl restart nginx
๋ด๊ฐ ์ํ๋ ๋๋ฉ์ธ์ผ๋ก ์ ์ด๋์ด ๋๋์ง ํ์ธ์ด ๋๋ฉด ๊ธฐ์ด ๊ณต์ฌ๋ ๋ชจ๋ ๋์ด๋ค.
5. (์ ํ์ฌํญ) SSL ์๋๊ฐฑ์ ๊ตฌ์ฑ
์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด certbot์ผ๋ก ์์ฑํ ๋ชจ๋ SSL๋ฅผ ๊ฐฑ์ ํ ์ ์๋ค.
sudo certbot renew
๊ทผ๋ฐ 3๊ฐ์๋ง๋ค ๊ฐฑ์ ํด์ฃผ๋ ค๊ณ ์ ๊ฒฝ์ ์จ์ผํ๋ค๋๊ฒ ์ฌ๊ฐ ๊ท์ฐฎ์ ์ผ์ด ์๋ ์ ์๋ค.
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํ ๊ฐ์ฅ ์ฌํํ ๋ฐฉ๋ฒ์ ๋ฆฌ๋ ์ค์ ์๋ํ ๊ธฐ๋ฅ์ธ crontab์ ์ฌ์ฉํด์ ๊ฐฑ์ ๋๋๋ก ๊ตฌ์ฑํ๋ฉด ๋๋ค.
์ฐ์ ์๋ ๋ช ๋ น์ด๋ก ์ํ๋ ๋๋ ํ ๋ฆฌ์ certbot๊ด๋ จ๋ ํด๋์ ํ์ผ์ ๋ง๋ค๋๋ก ํ์
cd /home/user #๋๋ ํ ๋ฆฌ๋ ๊ผญ ์์ ์ ๋๋ ํ ๋ฆฌ์ ๋ง๊ฒ ๋ณ๊ฒฝ
mkdir certbot
cd certbot
vi renew.sh
์์คํฌ๋ฆฝํธ ์์ฑ
#!/bin/bash
LOG_FILE="/home/user/certbot/renew.log" #๋๋ ํ ๋ฆฌ๋ ๊ผญ ์์ ์ ๋๋ ํ ๋ฆฌ์ ๋ง๊ฒ ๋ณ๊ฒฝ
echo "[$(date)] Certbot ๊ฐฑ์ ์์" >> "$LOG_FILE"
certbot renew >> "$LOG_FILE" 2>&1
echo "[$(date)] Certbot ๊ฐฑ์ ์๋ฃ" >> "$LOG_FILE"
:wq ๋ก ์ ์ฅ ๋ฐ ๋์ค๊ธฐ
๋ชจ๋ ๊ทธ๋ฃน์ ํ์ผ ์ฝ๊ธฐ/์ฐ๊ธฐ/์คํ ๊ถํ ๋ถ์ฌ
chmod 777 renew.sh
์ฌ๊ธฐ๊น์ง ๋์๋ค๋ฉด ์๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์
sudo ./renew.sh
์คํฌ๋ฆฝํธ๊ฐ ์ ์คํ๋๋์ง๋ ๋ก๊ทธ๊ฐ ์ ๋จ๋์ง ํ์ธํด๋ณด์.
ํฌ๋ก ํญ ์ถ๊ฐ
sudo crontab -e #๋ฐ๋์ sudo๋ก ํด์ผ su๊ถํ์ผ๋ก๋ง ์คํ ๊ฐ๋ฅํ certbot renew ๊ฐ ์ ์์คํ๋จ.
#3์๊ฐ ๋ง๋ค certbot renew
0 */3 * * * /home/user/certbot/renew.sh #๋๋ ํ ๋ฆฌ๋ ๊ผญ ์์ ์ ๋๋ ํ ๋ฆฌ์ ๋ง๊ฒ ๋ณ๊ฒฝ
์ด์ 3์๊ฐ๋ง๋ค ์๋์ผ๋ก SSL์ ๋ชจ๋ ๊ฐฑ์ ํ ์ ์๊ฒ ๋์๋ค.
6. (์ ํ์ฌํญ) 2์ฐจ ๋๋ฉ์ธ ์ถ๊ฐ
ํ์ฌ๊น์ง ๋๋ mydomain.com
, www.mydomain.com
code.mydomain.com
์ด๋ ๊ฒ 3๊ฐ์ง์ SSL ์ธ์ฆ์๋ฅผ mydomain.com
์ด๋ผ๋ ๊ณณ์ ํฉ์ณ์ ๋ฐ๊ธํ๋ค.
๋ง์ฝ info.mydomain.com
์ด๋ผ๋ ์ฃผ์๋ฅผ ์ฐ๋ ์ฌ์ดํธ๋ฅผ ํธ์คํ
ํ๋ ค๋ฉด ์ด๋ป๊ฒ ํด์ผ ํ ๊น?
!!!! ํด๋น ๋ฐฉ์์ ์งํํ๊ธฐ ์ ์ ๋ฌด์กฐ๊ฑด ๋๋ฉ์ธ ์ ๊ณต ์ ์ฒด์ ๋ด๊ฐ ์ฌ์ฉํ 1์ฐจ ๋๋ฉ์ธ mydomain.com, 2์ฐจ ๋๋ฉ์ธ second.mydomain.com ๋ฑ์ด ๋ฏธ๋ฆฌ ์ถ๊ฐ๊ฐ ๋์ด์์ด์ผ ํ๋ค!!!!
์๋ ์ฝ๋๋ฅผ ํตํด info.mydomain.com
์ธ์ฆ์๋ฅผ ์ถ๊ฐํ์.
sudo certbot certonly --nginx --cert-name mydomain.com -d mydomain.com -d www.mydomain.com -d info.mydomain.com
์ด๋ฒ์ ์ฒ์ ์ธ์ฆ์๋ฅผ ๋ฐ๊ธํ ๋๋์ ๋ฌ๋ฆฌ
- - - - - - - - - - - - - - - - - - - - - - - - - -
You are updating certificate izvillain.com to include new domain(s):
+ info.mydomain.com
You are also removing previously included domain(s):
(None)
Did you intend to make this change?
- - - - - - - - - - - - - - - - - - - - - - - - - -
(U)pdate certificate/(C)ancel: U
๋ผ๋ ๋ฉ์์ง๊ฐ ๋ฌ๋ค
์ถ๊ฐ๋๋ ๋๋ฉ์ธ๊ณผ ์ญ์ ๋ ๋๋ฉ์ธ ๋ชฉ๋ก์ธ๋ฐ ์ญ์ ๋๋ ๊ฒ ์๋์ง ๋ฐ๋์!! ์ ํ์ธํด๋ณด๊ณ U
๋ฅผ ์
๋ ฅ.
์ด๋ฒ์๋ ํด๋น 2์ฐจ ๋๋ฉ์ธ์ ์ ๊ทํธ์คํธ์ ๋ฌผ๋ฆฌ๊ธฐ ์ํด nginx์ .confํ์ผ์ ์์ ํ๋๋ก ํ์
vi /etc/nginx/sites-enabled/mydomain.com.conf
... ๋์ ์ถ๊ฐ
#4: ์ถ๊ฐ ์นํธ์คํธ
server {
listen 443 ssl;
server_name info.mydomain.com; #1์ฐจ๋๋ฉ์ธ์ผ๋ก ๋ค์ด์ค๋ ์ฃผ์ ์บ์น
ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem; #
ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;
location / {
root /home/user/infoweb/build/web; #ํธ์คํ
ํ ์น์ฌ์ดํธ ๊ฒฝ๋ก
index index.html; #์์ํ ์น์ฌ์ดํธ ์ธ๋ฑ์ค ํ์ผ
}
}
:wq
๋ก ์ ์ฅ ๋ฐ ๋์ค๊ธฐ
nginx ์ ํจ์ฑ ๊ฒ์ฌ
sudo nginx -t
Success๊ฐ ์ ํ์๋๋ค๋ฉด ๋ฌธ์ ์๋ ์ํ๋ฏ๋ก nginx ์๋น์ค ์ฌ์์
sudo systemctl restart nginx
์ด์ ์๋ก ์ถ๊ฐํ ์ฃผ์์ธ info.mydomain.com ์ด ์ ์ ์๋๋์ง ํ์ธํด๋ณด์.
7. (์ ํ์ฌํญ) Certbot ์ ์ฉํ ๋ช ๋ น์ด๋ค
sudo certbot certificates
: ํ์ฌ certbot์ ํตํด ๋ฑ๋ก๋์ด ์๋ ๋ชจ๋ ์ธ์ฆ์๋ค์ ํ์ํ๋ค.sudo certbot delete --cert-name mydomain.com
: ํด๋น ์ด๋ฆ์ ์ฌ์ฉํ๋ ๋ชจ๋ ์ธ์ฆ์๋ฅผ ์ญ์ ํ๋ค.sudo certbot renew
: ๋ชจ๋ SSL์ธ์ฆ์ ๊ฐฑ์ .
'๐ง Linux' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Linux] ์๋ฒ์ Nvidia ๊ทธ๋ํฝ ๋๋ผ์ด๋ฒ ์ค์น (0) | 2024.12.12 |
---|---|
[๋ฆฌ๋ ์ค] ๋๋ง์ ๋ช ๋ น์ด ๋ง๋ค๊ธฐ (์ปค์คํ ์ปค๋งจ๋) (0) | 2024.11.29 |
[Code-Server] ์ฝ๋์๋ฒ์ SSL ์ธ์ฆ์ ์ ์ฉํ๊ธฐ (2) | 2024.01.30 |
[Code-Server] ์ฝ๋์๋ฒ๋ฅผ Nginx๋ก ํ๋ก์ ํธ์คํ ํ๊ธฐ (2) | 2024.01.30 |
[Code-Server] ์์ SSL ์ ์ฉํ๊ธฐ (0) | 2024.01.24 |