ออกใบรับรอง SSL/TLS Wildcard ง่ายและฟรี ด้วย Certbot & CloudFlare DNS

Posted on
certbot devops

การเตรียมการยุ่งยากหน่อย เตรียมแค่ครั้งเดียวต่ออายุใบรับรองครั้งต่อๆไปจะเร็วและง่าย

  • ต้องติดตั้ง docker ก่อน
  • script ใช้งานได้จริงใน macOS และ Ubuntu ไม่ได้ทดสอบกับ Git bash
  • วิธีเอา domain ไปใช้ใน cloudflare ไม่ได้บอกเอาไว้นะ

1 สร้าง folder โครงสร้างแบบนี้ ผมจะตั้งตาม domain ที่จะขอเลย

ตัวอย่าง

corncord.co    
   |-- certs    
   |-- dns

สร้างไฟล์ dns-cloudflare.ini ภายใต้ dns folder

เนื้อหาของไฟล์ dns-cloudflare.ini

    # Cloudflare API credentials
    dns_cloudflare_email = account-with-cloudflare@gmail.com
    dns_cloudflare_api_key = f728c1d414de6f0696a00b7a283d5bda12345

dns_cloudflare_email คือ email ที่ใช้สมัครกับ cloudflare ซึ่งทำการเพิ่ม domain ที่จะเอามาขอ certificate เอาไว้แล้ว

dns_cloudflare_api_key คือ Global API key ของ account เราใน cloudflare

login เข้า cloudflare ไปหา API ได้ตามภาพด้านล่าง

Imgur

Imgur

2 สร้างไฟล์ script จะได้ไม่ต้องพิมพ์คำสั่งยาวๆ

สร้าง request.sh ใต้ folder corncord.co เลย มีเนื้อหาดังนี้

request.sh

    sudo docker run -it --rm -v "${PWD}/dns:/dns:ro" \
      -v "${PWD}/certs:/etc/letsencrypt:z" certbot/dns-cloudflare certonly \
      --email account-with-cloudflare@gmail.com \
      --agree-tos --no-eff-email \
      -d *.corncord.co --dns-cloudflare \
      --dns-cloudflare-credentials /dns/dns-cloudflare.ini

ให้แก้ไข account-with-cloudflare@gmail.com และ *.corncord.co เป็นของตัวเองซะ เช่น sirita@gmail.com และ corncord.co เป็นต้น

3 เปลี่ยน mode request.sh ให้ execute ได้

    chmod +x request.sh

4 execute script

    ./request.sh

เมื่อขอสำเร็จแล้วไฟล์ที่เกี่ยวข้องกับใบรับรองทั้งหมดจะอยู่ภายใต้ folder certs

ครั้งต่อๆไปเมื่อได้รับ email แจ้งเตือนใบรับรองจะหมดอายุ ก็แค่มารัน script ตัวนี้ แล้วเอาไฟล์ใบรับรองไปใช้ได้เลย