วันอาทิตย์ที่ 14 พฤษภาคม พ.ศ. 2560

วิธีการติดตั้ง SSL ฟรี จาก "Let's Encrypt" บน Apache Windows





Let’s Encrypt เป็นผู้ออกใบรับรองดิจิตอล (Certificate Authority) ซึ่งมี Internet Security Research Group เป็นผู้สนับสนุน มีจุดมุ่งหมายที่จะให้เกิดระบบความปลอดภัยบนเวปไซด์  และให้เข้าถึงการใช้ SSL ได้โดยง่าย ที่สำคัญ ฟรี! ซึ่งช่วยให้เราลดภาระค่าใช้จ่ายรายปีในการเช่าซื้อ SSL  

เนื้อหาในบทความนี้จะกล่าวถึงวิธีการตั้งค่าให้เวปไซด์ของเราทำงานบน HTTPS บน Apache Windows 




(1) Download เครื่องมือสำหรับสร้าง SSL Certificate  (letsencrypt-win-simple)




letsencrypt-win-simple เป็นโปรแกรมสำหรับใช้สร้าง SSL Certificate  บน Windows สามารถ Downlaod ได้ที่นี่ :  https://goo.gl/rBJ95d





(2) ทดสอบการสร้าง SSL Certificate 

หลังจากที่ Download ไฟล์มาแล้วให้เราแตก zip ออกมา และทดสอบการสร้าง SSL Certificate 
ให้เปิด Command Prompt หรือ พิมพ์ cmd ที่ Run แล้วพิมพ์คำสั่ง
cd C:\letsencrypt-win-simple


สั่งสร้าง Certificate บน Test mode โดยใช้คำสั่ง


letsencrypt.exe --manualhost <domain-name> --webroot <document-root> --test
<domain-name> คือ ชื่อเวปไซด์ที่ต้องการสร้าง Certifacate เช่น www.tong.com   
<document-root> คือ Root Path ของเวปไซด์ เช่น "C:\xampp\htdocs" 
ตัวอย่าง
letsencrypt.exe --manualhost www.tong.com --webroot "C:\xampp\htdocs" --test
ถ้าสร้างได้สำเร็จจะปรากฏข้อความดังนี้
Authorizing Identifier <domain-name> Using Challenge Type http-01
 Writing challenge answer to <document-root>\.well-known/acme-challenge/<challenge-text>
 Answer should now be browsable at <document-root>/.well-known/acme-challenge/<challenge-text>
 Submitting answer
 Refreshing authorization
 Authorization Result: valid

Requesting Certificate
 Request Status: Created
 Saving Certificate to C:\Users\<username>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<domain-name>-crt.der
 Saving Issuer Certificate to D:\Users\<username>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\ca-<hex>-crt.pem
 Saving Certificate to D:\Users\<username>\AppData\Roaming\letsencrypt-win-simple\httpsacme-stage.api.letsencrypt.org\<domain-name>-all.pfx



(3) สร้าง SSL Certificate 

เมื่อทดสอบผ่านแล้วให้เราสั่งสร้าง SSL Certificate โดยใช้คำสั่ง (เอาคำสั่ง --test ออก) 
letsencrypt.exe --manualhost <domain-name> --webroot <document-root>

(4) แก้ Config Apache (httpd.conf) 

เพิ่ม SSL Certificate Path ลงใน <VirtualHost>
** อย่าลืมเปิด
LoadModule vhost_alias_module modules/mod_vhost_alias.so
ด้วยนะครับ
<VirtualHost *:443>
    ServerAdmin admin@tong.com
    ServerName www.tong.com
    
    SSLEngine on
    SSLCertificateFile "C:/Users/<username>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<domain-name>-crt.pem"
    SSLCertificateKeyFile "C:/Users/<username>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<domain-name>-key.pem"
    SSLCertificateChainFile "C:/Users/<username>/AppData/Roaming/letsencrypt-win-simple/httpsacme-v01.api.letsencrypt.org/<domain-name>-chain.pem"    
   
    DocumentRoot "C:/xampp/htdocs"
    <Directory "C:/xampp/htdocs">
        Options Indexes FollowSymLinks
        AllowOverride None
        Order allow,deny
        Allow from all
    </Directory>
</VirtualHost>
<domain-name> คือ ชื่อเวปไซด์ที่ต้องการสร้าง Certifacate เช่น www.tong.com <username> คือ Folder User ของ Windows

(5) Restart Apache 

------ The END ------

หมายเหตุ : ให้ระวังในกรณีที่ Config RootDirectory ของ HTTP กับ HTTPS ไว้คนล่ะที่ 
เพราะ Let's Encrypt จะตรวจสอบ Key กลับมาที่ Port HTTP อาจทำให้เกิด Error 
ไม่พบ Key สำหรับตรวจสอบได้ วิธีการแก้ไข คือ ให้สร้าง SSL ด้วย Path ที่เป็น HTTP 
แล้ว Copy Folder ".well-know" ไปวางไว้ใน HTTPS Path ด้วย
หวังว่าคงจะได้รับประโยชน์จากบทความนี้ไม่มากก็น้อยนะครับ