λλ©μΈμ κΌ μ¨μΌνλ μ΄μ μ€ νλκ° μΈμ¦μ λλ¬Έμ΄κΈ°λ ν©λλ€.
μΈμ¦μλ λλ©μΈμ λν 보μμ μΈμ¦ν΄μ£Όκ³ μμ ν ν΅μ μ΄ λλλ‘ ν΄μ£Όλ μν μ ν΄μ€λλ€.
λ§μ μΈμ¦μ λ°κΈ κΈ°κ΄ μ€ λ¬΄λ£λ‘ μΈμ¦μλ₯Ό λ°κΈν΄μ£Όλ Letβs Encryptλ₯Ό μ¬μ©ν κ²μ
λλ€.
μ΄λ² μκ°μ μΈμ¦μ λ°κΈλΆν° μλκ°±μ κ·Έλ¦¬κ³ μΉμλ² μ μ©κΉμ§ ν΄λ³΄λλ‘ ν©μλ€!
μΈμ¦μ λ°κΈ μννΈμ¨μ΄μΈ 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 μ€ν¬λ¦½νΈκ° 보μΈλ€λ©΄ κ°±μ λͺ
λ Ήμ΄κ° μ λ±λ‘ λμ΄ μλ κ²μ
λλ€.
DiffieβHellman
ν€λ₯Ό μΆκ°ν΄μ μ¬μ΄νΈμ 보μμ κ°νν κ²μ
λλ€.
μ΄κ² μΉν¨λ¨Ήκ³ μλ λλμ§ μμ μ λλ‘ μκ°μ΄ μλΉν μ€λ 걸립λλ€.
λλ΅ 40λΆμ λ μμλλ κ² κ°μ΅λλ€.
sudo openssl dhparam -out /etc/ssl/dhparam.pem 4096
λλ¬λ€λ©΄ μλ μ½λλ‘ νμΌμ΄ μλμ§ νμΈν΄λ΄ μλ€.
ls -l /etc/ssl/dhparam.pem
ν μ€μ΄ λμ¨λ€λ©΄ μ μμ± λ κ²μ
λλ€.
μλ λ΄μ©μ μμ μ [λλ©μΈ]
μ λ§κ² μμ ν μμ±ν©μλ€.
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