ติดตั้ง Let’s Encrypt Free SSL Certificate

  วันนี้จะมาแนะนำวิธีติดตั้ง SSL Certificate ของ  Let’s Encrypt ที่เป็น SSL ที่แจกฟรี ไม่น่าเชื่อว่าจะมีวันนี้มาถึงเหมาะสำหรับใครที่ต้องการเข้ารหัส Website ของตัวเองและเบื่อที่ Browser แจ้งว่า Cer ไม่สามารถ Validate ได้ติดตั้งยังไงมาดูกันครับ สำหรับบทความนี้อีกเช่นเคยเป็นวิธีติดตั้งใน Ubuntu หรือ Debian เท่านั้นทั้ง Apache และ Nginx สำหรับ Let’s Encrypt นั่นจะเป็นมิตรกับ Apache มากกว่าเพราะมี tool สำหรับ Renew Cer ที่มีปัญหาน้อยที่สุดสำหรับใครที่ใช้ Nginx แล้วมีปัญหาอาจจะต้อง renew cer manual เอาเอง

  1. ติดตั้ง Git ก่อน sudo apt-get install git ถ้าใครมี Git อยู่แล้วข้ามขั้นตอนี้ไปได้เลย
  2. Download Let’s Encrypt มาเก็บไว้ที่เครื่อง
    git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt
  3. ไป directory ที่เราโหลด Let’s Encrypt มาเก็บไว้ในตัวอย่างนี้เก็บที่ /opt/letsencrypt
    cd /opt/letsencrypt
  4. สำหรับ Nginx ใช้ command
    ./letsencrypt-auto certonly –standalone
    สำหรับ Apache ใช้ command
    ./letsencrypt-auto –apache -d com โดย domain.com คือ ชื่อ domain ของ Website เราถ้ามี www ก็ควรใส่ให้ครบด้วยเช่น
    ./letsencrypt-auto –apache –d domain.com –d www.domain.com
    หรือถ้ามีมากกว่านี้ก็ควรใส่ให้ครบ
  5. ถ้าเป็น Nginx จะมี Wizard ขึ้นมาให้เราใส่ข้อมูลตาม Wizard ก็คือ email address ที่เราใช้ติดต่อได้ อ่าน License Agreement และขั้นตอนสุดท้ายก็ใส่ domain ให้ครบเหมือนของ apache ถ้าหาก Nginx run อยู่ควร stop nginx ก่อน
  6. หลังจากเสร็จขั้นตอนที่ 4 และ 5 แล้ว Nginx ก็จะแจ้งว่า

IMPORTANT NOTES:

– If you lose your account credentials, you can recover through

e-mails sent to [email protected]

– Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/domain.com/fullchain.pem. Your

cert will expire on 2016-03-26. To obtain a new version of the

certificate in the future, simply run Let’s Encrypt again.

– Your account credentials have been saved in your Let’s Encrypt

configuration directory at /etc/letsencrypt. You should make a

secure backup of this folder now. This configuration directory will

also contain certificates and private keys obtained by Let’s

Encrypt so making regular backups of this folder is ideal.

– If like Let’s Encrypt, please consider supporting our work by:

 

Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate

Donating to EFF:                    https://eff.org/donate-le

  1. ถ้าไม่แน่ใจว่า Certificate ไฟล์ของ Nginx อยู่ที่ไหนก็ใช้ command
    sudo ls /etc/letsencrypt/live/domain.com
    โดยที่ com คือชื่อ domain ทีเราระบุไปในตอนติดตั้ง Certificate
  2. แก้ค่า config ของทั้ง Apache และ Nginx ในส่วนของ
    ssl_certificate ssl_certificate_key  ชี้ไปที่ที่เราเก็บ certificate ไว้
  3. Restart apache หรือ nginx ก็พร้อมใช้งานแล้วครับถ้า browser ที่เคยเข้าเวปที่มี cer เก่าก็ clear browsing history หรือ cache ก่อนด้วยนะครับไม่งั้นอาจจะเจอ ssl error ได้

 

วิธี Renew Certificate สำหรับ Let’s Encrypt นั้น Cer จะมีอายุแค่ 90 วันเท่านั้นและควร Re certificate ไม่น้อยกว่า 30 วันที่จะหมดอายุ มาดู วิธี renew cer กันครับ สำหรับ apache นั้นมี tool สำเร็จรูปพร้อมให้ สำหรับ Nginx นั้นต้องใช้วิธี Webroot ไปก่อนถ้าใครใช้ได้ก็ดีใจด้วยสำหรับผมนั้นลองแล้วไม่ผ่านหลายคนก็เจอปัญหาเดียวกัน มาดูวิธีทำกันครับ ปล ณ เวลาที่เขียนนี้จากเอกสารของ Let’s Encrypt tool สำหรับ Nginx นั้นยังอยู่ในขั้นทดลองเท่านั้นยังไม่ได้ใส่เข้ามาจึงไม่มี option ให้เลือก

วิธี Renew ของ Apache

  1. ไปที่ directory ที่เราเก็บ Let’s Encrypt ไว้
    cd /opt/letsencrypt
  2. Run command
    ./letsencrypt-auto certonly –apache –renew-by-default -d domain.com

ถ้าหากใครมีหลาย domain หรือ sub domain เช่น www ก็ เพิ่มไปให้ครบเช่น
./letsencrypt-auto certonly –apache –renew-by-default -d domain.com –d www.domain.com
เท่านี้เราก็สามารถ renew cer ได้แล้วแต่ถ้าต้องการเพิ่มเข้าไปใน cron job ทำตามนี้ครับ

  1. โหลด script สำหรับ auto renew
    sudo curl -L -o /usr/local/sbin/le-renew http://do.co/le-renew
  2. แก้ permission ไฟล์
    sudo chmod +x /usr/local/sbin/le-renew
  3. ทดสอบ script ก่อนที่จะเพิ่มเข้าไปใน cron job
    sudo le-renew com

Checking expiration date for domain.com…

The certificate is up to date, no need for renewal (89 days left).
Output ที่ได้ก็จะประมาณนี้

เท่านี้เราก็เช็คได้แล้วว่า script ใช้งานได้พร้อมนำไปใส่ใน cron

 

วิธี Renew ของ Nginx สำหรับวิธีนี้จะใช้ webroot plugin ในการ renew แต่ถ้าใครใช้ไม่ได้แล้วได้ Error: The client lacks sufficient authorization ให้ข้ามไป วิธีถัดไปนะครับ วิธีใช้ webroot นั้นจะไม่มี downtime ของ web server

  1. หา root directory โดย
    grep “^\s*root” /etc/nginx/sites-enabled/default
    ถ้าหากใครเก็บไว้แตกต่างจากนี้ก็ set ให้ถูกด้วยนะครับไม่งั้นจะไม่สามารถใช้ วิธีนี้ได้
  2. สร้าง Let Encrypt configuration file
    sudo cp /opt/letsencrypt/examples/cli.ini /usr/local/etc/le-renew-webroot.ini
  3. แก้ไขไฟล์ sudo nano /usr/local/etc/le-renew-webroot.ini
  4. แก้ไข้ตามนี้ ใส่ comment # บรรทัดที่เขียนว่า server = https://acme-staging.api.letsencrypt.org/directory

เป็น #server = https://acme-staging.api.letsencrypt.org/directory
แก้ไข email เป็นเมลล์ที่เราใช้ไปครั้งแรกตอนติดตั้ง domains ใส่ domain ทั้งหมดที่เราต้องการจะใช้ลงไป webroot-path ที่หามาจาก ข้อ 1

  1. โหลด script สำหรับ renew มา
    sudo curl -L -o /usr/local/sbin/le-renew-webroot https://gist.githubusercontent.com/thisismitch/e1b603165523df66d5cc/raw/fbffbf358e96110d5566f13677d9bd5f4f65794c/le-renew-webroot
  2. แก้ไข permission
    sudo chmod +x /usr/local/sbin/le-renew-webroot
  3. ทกสอบ script sudo le-renew-webroot
    Checking expiration date for domain.com…

The certificate is up to date, no need for renewal (89 days left).
ได้ output ประมาณนี้

  1. เท่านี้เราก็เช็คได้แล้วว่า script ใช้งานได้พร้อมนำไปใส่ใน cron

วิธี Renew ของ Nginx สำหรับใครที่ใช้วิธี webroot plugin แล้วใช้งานไม่ได้ทำตามนี้นะครับแต่จะต้องมี downtime นิดหน่อย

  1. ไปที่ directory ที่เราเก็บ Let’s encrypted ไว้
    cd /opt/letsencrypt
  2. Run command ./letsencrypt-auto certonly –renew-by-default -d example.com
    ถ้าหากมีหลาย domain ก็ควรใส่ให้ครบเท่าที่ต้องการนะครับ
    ./letsencrypt-auto certonly –renew-by-default -d example.com -d example.com
  3. จะมี output ประมาณ Updating letsencrypt and virtual environment dependencies….
  4. ถ้าหากมี message แจ้ง
    The program nginx (process ID 17654) is already listening on TCP     x

x port 80. This will prevent us from binding to that port. Please stop x

x the nginx program temporarily and then try again.
ให้ทำการ stop nginx ก่อน

  1. หลังจาก runcommand ./letsencrypt-auto certonly –renew-by-default -d example.com จะได้ output ประมาณนี้
    IMPORTANT NOTES:

– Congratulations! Your certificate and chain have been saved at

/etc/letsencrypt/live/domain.com/fullchain.pem. Your cert will expire

on 2016-03-26. To obtain a new version of the certificate in the

future, simply run Let’s Encrypt again.

– If you like Let’s Encrypt, please consider supporting our work by:

 

Donating to ISRG / Let’s Encrypt:   https://letsencrypt.org/donate

Donating to EFF:                    https://eff.org/donate-le

  1. เท่านี้เราก็ renew certificate สำเร็จแล้วและ start nginx กลับมา

 

Leave a Reply

Your email address will not be published. Required fields are marked *