๐Ÿง Linux

[Code-Server] ์ฝ”๋“œ์„œ๋ฒ„์— SSL ์ธ์ฆ์„œ ์ ์šฉํ•˜๊ธฐ

Dogfoot_JW 2024. 1. 30. 21:19

ID : 2401302045

Tag : #code-server #linux #ssl

๊ฐœ์š”


์ด์ „ ์ž‘์—…์— ์ด์–ด ์ด๋ฒˆ์—” Code-Server์— SSL ์ธ์ฆ์„œ๋ฅผ ์ ์šฉํ•˜๊ณ ์ž ํ•œ๋‹ค.

๊ตฌ์„ฑ


์•„๋ž˜์˜ ํ•ญ๋ชฉ์€ Code-Server์— SSL ์ธ์ฆ์„œ ์ ์šฉ์„ ์œ„ํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ์‚ฌํ•ญ์ด๋‹ค.

  1. OS : Ubuntu 20.04.5 LTS (GNU/Linux 5.4.0-1100-raspi aarch64)
  2. Code-Server : v4.20.1
  3. Nginx : v1.18.0 (ubuntu)
  4. Proxy_pass ๊ฐ€ ๊ตฌ์„ฑ๋œ ์ƒํƒœ [https://cajava.tistory.com/62] ๋ฅผ ๋จผ์ € ์ง„ํ–‰ํ•ด์•ผ ํ•จ.
  5. DNS์˜ TXT๋ ˆ์ฝ”๋“œ๋ฅผ ์ ์šฉํ•  ์ˆ˜ ์žˆ๊ณ  Value๋ฅผ ์ปค์Šคํ…€ํ•  ์ˆ˜ ์žˆ๋Š” ๋„๋ฉ”์ธ ์ฃผ์†Œ (๊ฐ€๋น„์•„, CloudFlare ๋“ฑ)

์ง„ํ–‰


1. Certbot ์„ค์น˜

์šฐ์„  ๋ฌด๋ฃŒ SSL ๋ฐœ๊ธ‰์„ ์œ„ํ•ด ์‚ฌ์šฉ์ค‘์ธ ๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์— Certbot์„ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
๋‚˜๋Š” Ubuntu ํ™˜๊ฒฝ์—์„œ ์ง„ํ–‰ํ–ˆ์œผ๋ฏ€๋กœ apt ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €๋ฅผ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

sudo apt-get update;
sudo apt-get install -y certbot python3-certbot-nginx

์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋๋‹ค๋ฉด ์ธ์ฆ์„œ ๋ฐœ๊ธ‰์„ ์ง„ํ–‰ํ•˜๊ฒ ๋‹ค.

sudo certbot certonly --manual --preferred-challenges dns -d mydomain.com -d *.mydomain.com

 

์—ฌ๊ธฐ์„œ mydomain.com ์„ ์ ๊ณ ๋„ *.mydomain.com์„ ์ ์€ ์ด์œ ๋Š” mydomain์œผ๋กœ๋งŒ ๊ตฌ์„ฑ์„ ํ•˜๋ฉด www.mydomain.com์œผ๋กœ ์ ‘์†์ด   ๋ถˆ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์™€์ผ๋“œ์นด๋“œ์ธ *์„ 2์ฐจ ๋„๋ฉ”์ธ์œผ๋กœ ์ ์šฉ์‹œ์ผœ์•ผ ํ•œ๋‹ค.

 

<์‹คํ–‰ ๊ฒฐ๊ณผ>

. . .
Plugins selected : Authenticator manual, Installer None
Enter email address (used for urgent renewal and security notices) (Enter ‘c’ to cancel) : <MyEmail>@gmail.com
agree in order to register..
yes
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: n Account registered. Requesting a certificate for vm2.mydomain.com Performing the following challenges: dns-01 challenge for vm2.mydomain.com
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Please deploy a DNS TXT record under the name _acme-challenge.mydomain.com with the following value: -FzP4bCvVVXm1p9TTB7v8FCc80TejN83FhKTuIOnQwQ Before continuing, verify the record is deployed. 
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

์—ฌ๊ธฐ์„œ ๋„๋ฉ”์ธ ๊ณต๊ธ‰์—…์ฒด์—์„œ ์œ„์˜ ์ฑŒ๋ฆฐ์ง€๋Œ€๋กœ ์ง„ํ–‰์„ ํ•˜๊ณ  ์ปจํ‹ฐ๋‰ด๋ฅผ ํ•˜๋ฉด ๋œ๋‹ค.

์ธ์ฆ์„œ ๋ฐœ๊ธ‰์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ค„์ง€๋ฉด
/etc/letsencrypt/live/mydomain.com/fullchain.pem ํŒŒ์ผ๊ณผ
/etc/letsencrypt/live/mydomain.com/privkey.pem ํŒŒ์ผ์ด ์ƒ์„ฑ๋œ๋‹ค.

2. Nginx์— ์ธ์ฆ์„œ ์ ์šฉํ•˜๊ธฐ

์ด์ œ /etc/nginx/sites-available/my-site.conf ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค

sudo vim /etc/nginx/sites-available/my-site.conf

<์ˆ˜์ • ์ „>

server {
    listen 5500;

    . . .
}

<์ˆ˜์ • ํ›„>

server {
    listen 5500 ssl;

    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;

    . . .
}

<์ „์ฒด ํŒŒ์ผ>

server {
    listen 5500 ssl;  #์™ธ๋ถ€ ์ ‘๊ทผ์„ ์œ„ํ•œ port (ํฌํŠธํฌ์›Œ๋”ฉ๊ณผ ufw๋ฐฉํ™”๋ฒฝ ํ•ด์ œ๋ฅผ ํ•ด์•ผํ•จ.)
    ssl_certificate /etc/letsencrypt/live/mydomain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/mydomain.com/privkey.pem;

    server_name mydomain.com; #์™ธ๋ถ€์—์„œ ํ˜ธ์ถœํ•˜๋ฉด ์ด๋™์‹œํ‚ฌ ๋„๋ฉ”์ธ OR IP๋„ ๊ฐ€๋Šฅ

    location / {
        proxy_pass http://127.0.0.1:8080; #๋ฐฉ๊ธˆ ์™ธ์›Œ๋‘” ๋‚ด๋ถ€ ์•„์ดํ”ผ์˜ ์ฝ”๋“œ์„œ๋ฒ„ ์ฃผ์†Œ
        proxy_set_header Host mydoamin.com:5500; #(์ค‘์š”) ํ”„๋ก์‹œ ํŒจ์Šค๊ฐ€ ์ด๋ค„์งˆ๋•Œ ํ•ด๋‹น ํ˜ธ์ŠคํŠธ๋ช…์„ ๊ธฐ์ค€์œผ๋กœ ํ”„๋กœํ† ์ฝœ์„ ์—…๋ฐ์ดํŠธํ•˜๋Š”๋ฐ ์ด๋ถ€๋ถ„์ด ์ž˜๋ชป๋  ๊ฒฝ์šฐ WebSocket[1006] ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.
        #๋งŒ์•ฝ ์ด๋ ‡๊ฒŒ ํ•ด๋„ 1006 ์˜ค๋ฅ˜๊ฐ€ ๋œฌ๋‹ค๋ฉด Host mydomain.com; ๊นŒ์ง€๋งŒ ์จ๋ณด์ž.
        proxy_set_header Upgrade $http_upgrade; #Code-Server์˜ WebSocket ํ”„๋กœํ† ์ฝœ ์—…๊ทธ๋ ˆ์ด๋“œ๋ฅผ ์œ„ํ•œ ํ—ค๋” ์ง€์ •
        proxy_set_header Connection upgrade;
        proxy_set_header Accept-Encoding gzip;
        #access_log /home/<USER_NAME>/access.log; 
        #error_log /home/<USER_NAME>/error.log; #๋กœ๊น…์„ ์›ํ•œ๋‹ค๋ฉด ์ฃผ์„์„ ํ•ด์ œํ•˜๊ณ  ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.
    }
}

# server {
# #๋‹ค๋ฅธ ์„œ๋ฒ„๋ฅผ ์ถ”๊ฐ€ํ•  ๊ฒฝ์šฐ ํฌํŠธ๊ฐ€ ๊ฒน์น˜์ง€ ์•Š๊ฒŒ ์ถ”๊ฐ€ํ•˜์ž.
#}

์™„๋ฃŒ ๋˜์—ˆ๋‹ค๋ฉด Nginx๋ฅผ ์žฌ์‹คํ–‰ ํ•˜์ž

sudo nginx -t 
#OK ๊ฐ€ ๋œจ๋ฉด ๋‹ค์Œ์œผ๋กœ
sudo systemctl restart nginx.service

์ด์ œ ์ ์šฉ์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค.

์ง์ ‘ https://mydomain.com:5500 ์ฃผ์†Œ๋กœ ์ ‘์†ํ•ด๋ณด์ž
์—ฌ๊ธฐ์„œ ์ฃผ์˜ํ•  ์ ์€ ๊ทธ๋™์•ˆ http๋กœ ํ˜ธ์ŠคํŒ…์„ ํ–ˆ์ง€๋งŒ ์ธ์ฆ์„œ ์ ์šฉ ์ดํ›„๋ถ€ํ„ฐ๋Š” https ๋กœ ์ ‘์†์„ ํ•ด์•ผ ํ•œ๋‹ค.