Install Secure Nginx on Ubuntu 16.04 with Let's Encrypt

ทดสอบบน Ubuntu 16.04

1. ติดตั้ง package letsencrypt
  • sudo apt-get install letsencrypt

2. ติดตั้งโดยใช้รูปแบบ webroot plugin การทำงานจะอยู่ใน /.well-known ของ document root ให้ทำการแก้ไขไฟล์ /etc/nginx/sites-available/default
  •  sudo nano /etc/nginx/sites-available/default
        location ~ /.well-known {
                allow all;
        }
  • sudo service nginx restart
3. สมมุติว่า webroot เป็น /var/www/html ติดตั้งแบบ certonly ด้วยคำสั่ง
  • sudo letsencrypt certonly --webroot -w /var/www/html -d example.com
4. Generate Strong Diffie-Hellman Group
  • sudo openssl dhparam -out /etc/letsencrypt/live/example.com/dhparam.pem 2048
5. ตรวจสอบไฟล์ certificates
  • sudo ls -l /etc/letsencrypt/live/example.com
lrwxrwxrwx 1 root root  42 Oct 10 12:55 cert.pem -> ../../archive/example.com/cert1.pem
lrwxrwxrwx 1 root root  43 Oct 10 12:55 chain.pem -> ../../archive/example.com/chain1.pem
-rw-r--r-- 1 root root 769 Oct 10 13:43 dhparam.pem
lrwxrwxrwx 1 root root  47 Oct 10 12:55 fullchain.pem -> ../../archive/example.com/fullchain1.pem
lrwxrwxrwx 1 root root  45 Oct 10 12:55 privkey.pem -> ../../archive/example.com/privkey1.pem

6. ปรับแต่งไฟล์ Configuration SSL บน nginx
  •  sudo nano /etc/nginx/sites-available/default
server {
    listen 80;
    server_name example.com;
    if ($scheme = http) {
        return 301 https://example.com$request_uri;
    }
}

server {
    listen 443;
    server_name example.com;

        ssl on;
        ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers 'EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH';
        ssl_prefer_server_ciphers on;

        ssl_session_cache shared:SSL:10m;
        # generate dhparams.pem: openssl dhparam -out dhparam.pem 4096
        ssl_dhparam /etc/letsencrypt/live/example.com/dhparam.pem;

    location / {

    }
}


7. Auto Renewal เนื่องจาก Let’s Encrypt certificates จะมีอายุการใช้งานเพียง 90 วัน ทดสอบการทำงานคำสั่ง renew
  • sudo letsencrypt renew --dry-run --agree-tos
8. ต่อมาเราต้องการให้ letsencrypt renew ก่อนที่ certificates จะหมดอายุ โดยผมจะเขียน script แล้วสั่งให้ cron ทำงานทุกสิ้นเดือน
  • sudo nano /etc/cron.monthly/letsencrypt
#!/usr/bin/env bash

/usr/bin/letsencrypt renew && service nginx reload
  • sudo chmod u=rwx,go=rx /etc/cron.monthly/letsencrypt
  • sudo service cron restart 




ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

ติดตั้ง Radius Server แบบใช้ฐานข้อมูล MySql

เปิดการใช้งาน SNMP Service บน Windows 7

Docker : Install docker compose on ubuntu 16.04 LTS