หันมาใช้ https กับ Let’s Encrypt กันดีกว่า

SSL certificate ที่ฟรีและถูกต้องตามหลักสากล

ที่จริงต้องบอกว่าผมเองก็ไม่ได้รู้เรื่อง SSL หรือโปรโตคอล https ในเชิงลึกอะไรมากเลย แต่ด้วยความที่ว่าการหันมาใช้ https แทน http ธรรมดานั้นจะส่งผลในเรื่องของความปลอดภัย(ทั้งๆ ที่โดเมนตัวเองเป็นบล็อกทั่วไปเนี่ยนะ?) กับอีกเรื่องคือโปรโตคอลที่จะมีผลด้าน SEO ในอนาคตก็คือตัว https นั่นแหละครับ เลยคิดว่าไหนๆก็ไหนๆ แล้วลองทำดูก็ไม่เสียหายอะไร มีก็ดีไม่มีก็ไม่เป็นไร

ประจวบเหมาะกับไปเห็น Let’s Encrypt ที่เป็น open certificate ทั้งฟรีแล้วก็ถูกต้องเป็นหลักสากล ไอ้ผมเองก็ไม่ได้รู้อะไรมากเลย ไม่รู้ด้วยว่า ISRG(Internet Security Research Group) ที่เป็นคนสร้างเนี่ยคือใคร, SSL เบื้องลึกทำงานยังไง เพราะตอนนี้มันค่อนข้างห่างกับงานที่ถืออยู่ แล้วก็มีหุ้นส่วนอีกคนของ JindaTheme ที่ดูแลในส่วนของ server ทั้งหมดให้

Let’s Encrypt

host ของ Jir4yu.me ก็น่าจะเป็นตัวทดลองที่ดี เพราะใช้ digitalocean แล้วก็ setup ตั้งแต่ 0 มาจนถึงตอนนี้ ก็คิดว่าน่าจะจำพวก path หรือ config อะไรเองได้พอสมควร

การตั้งตั้ง Let’s Encrypt

มันก็ค่อนข้างง่ายอยู่ครับ กับคนที่ไม่ได้เกี่ยวข้องกับส่วนของ server structure โดยตรง คือให้เราเข้าไปที่เว็บไซต์ Let’s Encrypt แล้วเข้าไปที่หน้า How it Works ก็จะพบวิธีการติดตั้ง Let’s Encrypt บน server ของเรา ยกตัวอย่างง่ายๆ ถ้าทำตามขั้นตอนในเว็บเลยก็จะเรียงตามนี้

git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly --standalone -d yourdomain.com -d www.yourdomain.com

บน Jir4yu.me ของผมใช้ NginX เลยจำเป็นต้อง stop process มันไว้ก่อน แล้วก็เลือกแบบ standalone ไปที่ hostname ของตัวเอง ซึ่งสำหรับคนที่ใช้ Apache นั้น Let’s Encrypt ก็มี module เสริมให้โดยเฉพาะอย่าง ./letsencrypt-auto --apache หลังจากที่เราทำตาม setup แล้ว จะได้ไฟล์ .pem มาสองไฟล์ และจะต้องให้ web server เราเรียกใช้ไฟล์เหล่านั้นครับ

ตั้งค่า NginX ให้รองรับการใช้งาน https และอ่านไฟล์ pem

ผมเองอยากจะ redirect โดยใช้ code 301(เป็น redirect code แบบที่ถูกต้องตามหลัก SEO ซึ่งมันจะหมายความว่าเราตั้งใจจะทำ redirect จริงๆ ยกตัวอย่างเคสที่เป็น non-www ไป www หรืออีกกรณีที่มีการเปลี่ยนแปลง domain หลักอะไรทำนองนั้น) เลยเข้าไปตั้งค่าในไฟล์ config ของ site ตัวเอง โดยแยกเพิ่มเป็น server block 2 อันตามนี้ครับ

server{
        listen          80;
        server_name     www.yourdomain.com yourdomain.com;
        return          301 https://$server_name$request_uri;
}

อันแรกเป็นของ http ธรรมดา ส่วนอีกอันที่จะสร้างขึ้นมาให้ listen ไปที่ port เบอร์ 443 พร้อมทั้งเรียกใช้ ssl_certificate และ ssl_certificate_key ชี้ไปยังไฟล์ pem ที่เราเพิ่งสร้างขึ้นครับ (อย่าลืมเปลี่ยน yourdomain.com เป็นชื่อเว็บไซต์ของเราด้วยนะครับ)

server {
	..
	# SSL configuration
	listen 443 ssl;
	listen [::]:443 ssl;
	ssl_certificate /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/www.yourdomain.com/privkey.pem;
	..
}

แล้วก็ทำการ restart ตัว NginX สักหนึ่งครั้งก็เป็นอันเรียบร้อยครับ

Certificate มีอายุการใช้งาน 3 เดือน

หลังจากหมดอายุแล้วเราต้องทำการ generate cer ขึ้นมาใหม่ครับ โดยวิธีการทำนั้นก็ไม่ต้องติดตั้งอะไรเพิ่มเติมจากของเดิมแล้ว แค่ใช้คำสั่ง ./letsencrypt-auto certonly แบบครั้งแรกที่สร้างขึ้นมา

อัพเดท 23/05/2016: ตอนนี้ Let’s Encrypt เปลี่ยนไปใช้ตัวที่ชื่อว่า certbot แทนแล้วครับ ซึ่งใครที่อยากจะต่ออายุคีย์เดิม ก็สามารถทำได้ผ่าน certbot เหมือนกัน โดยติดตั้ง certbot ก่อน แล้วใช้คำสั่ง ./certbot-auto renew ก็จะสามารถต่ออายุเพื่อใช้งานต่อได้ปรกติครับผม

ส่วนใครที่คิดว่า certificate ของ Let’s Encrypt นั้นไม่ดีไม่มีประโยชน์ อยากจะเอาออก หรือจะใช้ cer ของตัวเองที่ซื้อมาใหม่ ก็ลบได้เพียงแค่ใช้ command ด้านล่างเรียกไปที่ไฟล์ .pem ครับ

letsencrypt revoke --cert-path /etc/letsencrypt/live/www.yourdomain.com/fullchain.pem;
แชร์บทความนี้

    แสดงความเห็นของคุณที่นี่

    กรุณากรอกอีเมล์ของคุณก่อนส่งข้อมูล เพื่อรับการแจ้งเตือนเมื่อมีคนมาตอบข้อความของคุณ