πŸ ν™ˆμ„œλ²„ λ§Œλ“€κΈ°πŸ  μΈμ¦μ„œ

μƒˆμ–‘Β·2021λ…„ 3μ›” 7일
1

ν™ˆμ„œλ²„ λ§Œλ“€κΈ°

λͺ©λ‘ 보기
7/12
post-thumbnail

κ°œμš”


도메인을 κΌ­ μ¨μ•Όν•˜λŠ” 이유 쀑 ν•˜λ‚˜κ°€ μΈμ¦μ„œ λ•Œλ¬Έμ΄κΈ°λ„ ν•©λ‹ˆλ‹€.
μΈμ¦μ„œλŠ” 도메인에 λŒ€ν•œ λ³΄μ•ˆμ„ 인증해주고 μ•ˆμ •ν•œ 톡신이 λ˜λ„λ‘ ν•΄μ£ΌλŠ” 역할을 ν•΄μ€λ‹ˆλ‹€.

λ§Žμ€ μΈμ¦μ„œ λ°œκΈ‰ κΈ°κ΄€ 쀑 무료둜 μΈμ¦μ„œλ₯Ό λ°œκΈ‰ν•΄μ£ΌλŠ” Let’s Encryptλ₯Ό μ‚¬μš©ν•  κ²ƒμž…λ‹ˆλ‹€.
이번 μ‹œκ°„μ— μΈμ¦μ„œ λ°œκΈ‰λΆ€ν„° μžλ™κ°±μ‹  그리고 μ›Ήμ„œλ²„ μ μš©κΉŒμ§€ 해보도둝 ν•©μ‹œλ‹€!



Certbot μ„€μΉ˜

μΈμ¦μ„œ λ°œκΈ‰ μ†Œν”„νŠΈμ›¨μ–΄μΈ Certbot을 μ„€μΉ˜ν•  κ²ƒμž…λ‹ˆλ‹€.
μ„€μΉ˜λ₯Ό ν•˜λŠ” 도쀑 μ—”ν„°λ₯Ό 눌러 μ„€μΉ˜λ₯Ό 계속 μ§„ν–‰ν•˜λ©΄ λ©λ‹ˆλ‹€.

sudo apt install python3-certbot-nginx




μΈμ¦μ„œ λ°œκΈ‰

μ‚¬μš©ν•  도메인 각각을 μž…λ ₯ν•΄μ„œ λ°œκΈ‰μ„ ν•΄λ³΄μž.
λͺ…λ Ήμ–΄ 끝에 -d ygh.kr κ³Ό -d www.ygh.kr 이 보일 텐데 μΈμ¦μ„œμ— 더 μΆ”κ°€ν•˜κ³  싢은 도메인이 μžˆμ„ 경우 -d [도메인] 을 μž…λ ₯ν•˜λ©΄ λ©λ‹ˆλ‹€.

μ•„λž˜ λͺ…λ Ήμ–΄ 쀑 이메일 λΆ€λΆ„κ³Ό 도메인 뢀뢄은 μžμ‹ μ— 맞게 λ°”κΏ”μ„œ μ‚¬μš©ν•˜μ‹œκΈΈ λ°”λžλ‹ˆλ‹€.

sudo certbot certonly --nginx --non-interactive --agree-tos -m chchch1213@naver.com -d ygh.kr -d www.ygh.kr

λ§Œμ•½ λ‹€μŒμ— μ„œλΉ„μŠ€κ°€ μΆ”κ°€λ˜μ–΄ 이미 λ§Œλ“€μ–΄μ§„ μΈμ¦μ„œμ— 도메인을 μΆ”κ°€ν•˜κ³  μ‹Άλ‹€λ©΄ μ•„λž˜ λͺ…λ Ήμ–΄λ₯Ό μ΄μš©ν•˜μ„Έμš”.

sudo certbot --cert-name ygh.kr -d ygh.kr -d www.ygh.kr -d add.ygh.kr -d plus.ygh.kr




μΈμ¦μ„œ 확인

λ°œκΈ‰μ΄ μ™„λ£Œλ˜λ©΄ μΈμ¦μ„œκ°€ 잘 생성 λ˜μ—ˆλŠ”μ§€ ν™•μΈν•΄λ΄…μ‹œλ‹€.

sudo ls -l /etc/letsencrypt/live/ygh.kr




μΈμ¦μ„œ μžλ™ κ°±μ‹ 

λ°œκΈ‰λ°›μ€ μΈμ¦μ„œλ₯Ό 90일뒀 μžλ™ νŒŒκΈ°λ˜λŠ”λ° κ±±μ •ν•˜μ§€ λ§ˆμ„Έμš”.
Certbot을 μ΄μš©ν•΄ λ°œκΈ‰λ°›μ•˜κΈ° λ•Œλ¬Έμ— μžλ™ κ°±μ‹ λ˜λ„λ‘ λ˜μ–΄μžˆμŠ΅λ‹ˆλ‹€.

μΈμ¦μ„œλŠ” 만료되기 30일 이후뢀터 갱신을 ν•  μˆ˜κ°€ μžˆλŠ”λ° λ¦¬λˆ…μŠ€μ˜ cronμ΄λΌλŠ” μŠ€μΌ€μ€„λŸ¬ ν”„λ‘œκ·Έλž¨μ΄ 맀일 0μ‹œμ™€ 12μ‹œμ— 갱신이 ν•„μš”ν•œμ§€ 확인 ν›„ ν•„μš” ν•  경우 κ°±μ‹ κΉŒμ§€ ν•΄μ€λ‹ˆλ‹€.

κ°±μ‹  λͺ…λ Ήμ–΄κ°€ 잘 λ“±λ‘λ˜μ–΄ μžˆλŠ”μ§€ ν™•μΈν•΄λ΄…μ‹œλ‹€.

cat /etc/cron.d/certbot
0 */12 * * * root test -x /usr/bin/certbot -a \! -d /run/systemd/system && perl -e 'sleep int(rand(43200))' && certbot -q renew

제일 μ•„λž˜ 쀄에 μœ„μ™€ 같이 cron μŠ€ν¬λ¦½νŠΈκ°€ 보인닀면 κ°±μ‹  λͺ…λ Ήμ–΄κ°€ 잘 등둝 λ˜μ–΄ μžˆλŠ” κ²ƒμž…λ‹ˆλ‹€.



DH Param ν‚€ 생성

Diffie–Hellman ν‚€λ₯Ό μΆ”κ°€ν•΄μ„œ μ‚¬μ΄νŠΈμ˜ λ³΄μ•ˆμ„ κ°•ν™”ν•  κ²ƒμž…λ‹ˆλ‹€.

이게 μΉ˜ν‚¨λ¨Ήκ³  와도 λλ‚˜μ§€ μ•Šμ„ μ •λ„λ‘œ μ‹œκ°„μ΄ μƒλ‹Ήνžˆ 였래 κ±Έλ¦½λ‹ˆλ‹€.
λŒ€λž΅ 40뢄정도 μ†Œμš”λ˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

sudo openssl dhparam -out /etc/ssl/dhparam.pem 4096

끝났닀면 μ•„λž˜ μ½”λ“œλ‘œ 파일이 μžˆλŠ”μ§€ ν™•μΈν•΄λ΄…μ‹œλ‹€.

ls -l /etc/ssl/dhparam.pem

ν•œ 쀄이 λ‚˜μ˜¨λ‹€λ©΄ 잘 생성 된 κ²ƒμž…λ‹ˆλ‹€.



Nginx μΈμ¦μ„œ 적용

μ•„λž˜ λ‚΄μš©μ„ μžμ‹ μ˜ [도메인] 에 맞게 μˆ˜μ • ν›„ μž‘μ„±ν•©μ‹œλ‹€.

sudo vim /etc/nginx/sites-available/[도메인]
server {
        listen 80 default_server;
        server_name [도메인];
        return 301 https://$server_name$request_uri;
}

server {
        listen 443 ssl http2 default_server;
        server_name [도메인];
        root /var/www/html;

        ssl_certificate /etc/letsencrypt/live/[도메인]/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/[도메인]/privkey.pem;
        ssl_trusted_certificate /etc/letsencrypt/live/[도메인]/chain.pem;
        ssl_dhparam /etc/ssl/dhparam.pem;
        ssl_session_timeout 10m;
        ssl_session_cache shared:SSL:10m;
        ssl_session_tickets off;

        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_prefer_server_ciphers on;
        ssl_ciphers TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256;
        ssl_ecdh_curve secp384r1;

        add_header Strict-Transport-Security max-age=31536000;
        add_header X-Content-Type-Options "nosniff" always;
        add_header X-Frame-Options "SAMEORIGIN" always;
        add_header X-XSS-Protection "1; mode=block" always;

        ssl_stapling on;
        ssl_stapling_verify on;

        index index.html index.nginx-debian.html;

        location / {
                try_files $uri $uri/ =404;
        }
}
sudo nginx -t
sudo service nginx restart

기쑴에 http://[도메인] 의 접속은 https://[도메인] 으둜 λ„˜μ–΄κ°€λ„λ‘ 301 λ¦¬λ””λ ‰μ…˜ μ½”λ“œλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.
이제 http 둜 μ ‘μ†ν•˜λ©΄ μžλ™μœΌλ‘œ https μ ‘μ†μœΌλ‘œ λ°”λ€Œκ²Œ λ©λ‹ˆλ‹€.



접속 ν…ŒμŠ€νŠΈ

μ›Ή νŽ˜μ΄μ§€λ‘œ http://[도메인] 에 접속을 해보면 μžλ™μœΌλ‘œ https://[도메인] 으둜 λ°”λ€ŒλŠ” 것을 λ³Ό μˆ˜κ°€ μžˆμ„ 것이며 μ›Ή νŽ˜μ΄μ§€ μ£Όμ†Œ μ°½μ—μ„œ μ’Œλ¬Όμ‡  λͺ¨μ–‘κ³Ό μΈμ¦μ„œλ₯Ό 클릭해 λ³΄μ„Έμš”.
ν•΄λ‹Ή μ‚¬μ΄νŠΈμ˜ μΈμ¦μ„œλ₯Ό 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.





λ³΄μ•ˆ 평가

이제 ν™ˆμ„œλ²„μ˜ 웹이 μ–Όλ§ˆλ‚˜ μ•ˆμ „ν•œμ§€ λ³΄μ•ˆ 등급을 λ§€κ²¨μ£ΌλŠ” ν…ŒμŠ€νŠΈλ₯Ό ν•΄λ΄…μ‹œλ‹€.

μ•„λž˜ 링크에 λ“€μ–΄κ°„ λ’€ 도메인 μ£Όμ†Œλ₯Ό μž…λ ₯ν•΄λ³΄μ‹œλ©΄ 수 λΆ„ λ’€ κ²°κ³Όλ₯Ό μ•Œλ €μ€λ‹ˆλ‹€.
https://www.ssllabs.com/ssltest/analyze.html

profile
μ•ˆλ…•, 세상!

0개의 λŒ“κΈ€