ปกติแล้วถ้าเราจะทำให้เว็บของเราเข้าผ่าน HTTPS ได้เนีย เราก็ต้องเสียเงินซื้อ Certificate ซึ่งก็มีราคาตั้งแต่หลักพันถึงหลักหมื่น แต่เท่าที่ผมลองมาก็มีของ http://rapidssl.com/ ที่ราคาถูกหน่อยประมาณ 500 กว่าบาทต่อปี แต่ถ้าไม่อยากจ่ายเงินเลยตอนนี้ก็มี Let’s Encrypt https://letsencrypt.org/ ที่มาช่วยเราประหยัดค่าใช้จ่ายตรงนี้ได้ ซึ่งก็มีวิธีติดตั้งง่ายมากๆ ง่ายกว่าแบบเสียเงินซะอีก แต่ว่า certificate ที่ได้มาจะมีอายุแค่ 90 วัน พอหมดอายุแล้วเราก็ต้องกลับไปต่อใหม่ ซึ่งผมก็คิดว่าไม่น่าใช่ปัญหา ลองติดตั้งกันเลยดีกว่า ใช้แค่ 3 ขั้นตอนก็เสร็จ เริ่มเลย..
ขั้นแรกทำการติดตั้ง Git ซะก่อน
1 | # apt-get install git |
ทำการ clone letsencrypt จาก github
1 | # git clone https://github.com/letsencrypt/letsencrypt |
สั่งรัน ./letsencrypt-auto เพื่อสร้างคีย์
1 2 | # cd letsencrypt # ./letsencrypt-auto |
หลังจากสั่ง ./letsencrypt-auto ระบบจะแสดงหน้าจอขึ้นมาให้เราเลือกเว็บที่ต้องการจะทำเป็น HTTPS (ตรงนี้สำคัญ แนะนำให้เลือกทำทีละเว็บนะครับ ผมลองเลือกที่ละหลายเว็บพร้อมกันแล้วระบบมันสร้างคีย์ขึ้นมาให้ตัวเดียวแล้วใช้ด้วยกัน แต่ถ้าเราสร้างคนละทีมันจะแยกคีย์ให้)
เลือก Easy แล้วก็กด OK ข้ามไปครับ
เสร็จเรียบร้อย ดีใจด้วยคุณได้เว็บที่มี https นำหน้าแล้ว แต่ว่า certificate ที่ได้มาจะมีอายุ 90 วัน พอครบแล้วเราต้องมาขอใหม่นะครับ ซึ่งก็ไม่น่าใช่ปัญหา
ทดสอบเปิดเว็บขึ้นมาดูหน่อยว่าขึ้นสีเขียวไหม ถ้าไม่ได้ก็ตัวใครตัวมันครับ ฝันดี…
# เพิ่มเติมให้อีกหน่อย หากต้องการสร้าง Certificate Key แค่อย่างเดียวก็ให้ใช้คำสั่งต่อไปนี้ แต่ก่อนสั่งต้อง stop apache ก่อนนะครับ และเมื่อสร้างเสร็จแล้ว เราต้องเป็นคนแก้ config ของ apache ให้ใช้ Certificate ตัวใหม่นี้เองด้วย โดย certificate ที่ได้จะถูกเก็บไว้ที่ /etc/letsencrypt/live/
1 | # ./letsencrypt-auto certonly --standalone -d www.lookhin.com -d lookhin.com |
เมื่อได้ Certificate มาแล้วเราต้องเข้าไปแก้ไขคอนฟิกไฟล์ของ apache ในส่วนของ VirtualHost ให้เรียกใช้ Certificate Key ตัวใหม่เหมือนในตัวอย่างนี้
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <IfModule mod_ssl.c> <VirtualHost *:443> ServerAdmin khwanchai@gmail.com ServerName lookhin.com ServerAlias www.lookhin.com DocumentRoot /var/www/lookhin.com CustomLog ${APACHE_LOG_DIR}/lookhin.com.access.log combined ErrorLog ${APACHE_LOG_DIR}/lookhin.com.error.log SSLCertificateFile /etc/letsencrypt/live/www.lookhin.com-0001/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/www.lookhin.com-0001/privkey.pem Include /etc/letsencrypt/options-ssl-apache.conf </VirtualHost> </IfModule> |
# เราจะเห็นว่าทุกครั้งที่เราสั่งสร้าง certificate มันจะมี dialog box ขึ้นมาถามตลอดว่าทำนู้นไหมนี้ไหม ซึ่งถ้าเราไม่อยากให้มันถามอะไร เราก็ใส่คำสั่งไปทีเดียวได้ว่าจะให้มันทำอะไรบ้าง (และเดียวเราจะเอาคำสั่งตรงนี้หละไปใส่ใน crontab เพื่อให้มันต่ออายุอัตโนมัติ)
1 | # ./letsencrypt-auto certonly --webroot -w /var/www/lookhin.com --email khwanchai@gmail.com --text --no-redirect --renew-by-default --agree-tos -d www.lookhin.com -d lookhin.com |
# การต่ออายุ certificate อัตโนมัติ ในคู่มือของทาง letsencrypt เองก็บอกว่าเราสามารถทำได้โดยตั้งเวลาต่ออายุใหม่ไว้ใน crontab เลยก็ได้ โดยให้ต่ออายุใหม่ก่อนที่มันจะครบ 90 วัน แต่ว่า crontab มันเลือกไม่ได้นี้ว่าให้นับ 90 วันแล้วทำงาน มันเลือกได้แค่วันเวลา งั้นวิธีที่ง่ายที่สุดผมจะสั่งมันต่ออายุ certificate ใหม่ทุกๆ วันที่ 1 ของเดือน 2, 4, 6, 8, 10, 12 ซึ่งแต่ละรอบก็ประมาณ 60 วัน หรือหากกว่าใครมีวิธีดีกว่านี้แนะนำผมได้นะ ตอนนี้คิดออกเท่านี้
1 | 0 0 1 2,4,6,8,10,12 * /root/letsencrypt/letsencrypt-auto certonly --webroot -w /var/www/lookhin.com --email khwanchai@gmail.com --text --no-redirect --renew-by-default --agree-tos -d www.lookhin.com -d lookhin.com && /usr/sbin/service apache2 reload |
# หรือถ้าหากว่าเราใช้โฮสที่เป็น share host ที่เขามี control panel ให้สามารถใส่ ssl certificate เองได้ แต่ไม่สามารถ shell เข้าใช้งานได้ เราสามารถที่จะใช้เครื่องอื่นที่สามารถใช้ letsencrypt ในการสร้าง certificate ขึ้นมาแล้วเอา certificate ที่ได้มาใช้กับโฮสนั้นก็ได้ โดยให้เราสั่งรัน ./letsencrypt-auto certonly –manual ซึ่งระบบจะให้เราไปสร้าง text file อันหนึ่งไว้ในเว็บของเราเพื่อเป็นการยืนยันว่าเราเป็นเจ้าของจริงๆ เช่น http://www.lookhin.com/.well-known/acme-challenge/..d_Sd6yI………vNCi3-uEb…Y เมื่อสร้างเสร็จแล้วเราจะได้ไฟล์ certificate และ key อยู่ในโฟสเดอร์ /etc/letsencrypt/archive/www.lookhin.com/ ให้ใช้ไฟล์ทั้งหมดในนี้ไปใช้งาน
1 | # ./letsencrypt-auto certonly --manual |