หลังจากที่ดำเนินการติดตั้ง Cent OS รวมทั้ง ติดตั้ง Apache / PHP เรียบร้อยแล้ว ในบทความนี้จะขอแนะนำขั้นตอนการติดตั้ง SSL certificate สำหรับ apache ที่มีการใช้งานบน Centos 7
SSL certificates คือการเข้ารหัสข้อมูลที่มีการรับ-ส่ง ระหว่าง server และ client เพื่อยืนยันการมีตัวตนและความน่าเชื่อถือของเจ้าของ web site และรับรองความปลอดภัยในการเข้ารหัส-ถอดรหัสข้อมูลด้วยระบบ SSL ผ่านการเรียกโปรโตคอล https
ขั้นตอน
ดำเนินการ update package manager ต่างๆ ให้เรียบร้อย และติดตั้งแพคเกจที่ต้องใช้สำหรับ Let’s Encrypt
# yum -y update # yum -y install epel-release # yum -y install git
เริ่มการติดตั้ง Let’s Encrypt โดย download Let’s Encrypt client สำหรับใช้งาน โดยการ download นี้ จะถูกกำหนดวางไว้ที่ /opt/letsencrypt
# git clone https://github.com/letsencrypt/letsencrypt /opt/letsencrypt # cd /opt/letsencrypt # ./letsencrypt-auto --help
การสร้าง SSL Certificate
Let’s Encrypt client มีการรองรับการทำงาน ในรูปแบบ plugin ที่แตกต่างกัน เช่น
กรณีที่มีการใช้งาน apache/2.x บน Debian 8 หรือ Ubuntu 12.04 ขึ้นไป สามารถใช้ apache plugin ได้
# ./letsencrypt-auto --apache
กรณีที่มีการใช้งาน OS อื่นๆ ผู้ใช้งานจำเป็นต้องใช้คำสั่ง “certonly” ตัวอย่างเช่น
– การเลือกใช้งาน plug in: standalone อาจต้อง stop web server บนเครื่องที่มีการใช้งาน www ที่ต้องการรับค่า SSL เพื่อยืนยันสิทธิในการควบคุม web server
# ./letsencrypt-auto certonly –standalone -d example.com -d www.example.com
– การเลือกใช้ plug in: webroot จะสามารถใช้งานได้กับ web server หลายโปรแกรม เนื่องจาก จะมีการเพิ่มไพล์เพื่อยืนยันตัวตนไปที่ –webroot-path นั้นๆ
./letsencrypt-auto certonly –webroot –webroot-path /var/www/example -d example.com -d www.example.com
ตัวอย่างด้านล่าง คือการสร้าง SSL สำหรับ (ให้เปลี่ยนเป็นข้อมูลจริงของท่านเอง)
Domain: site1.DOMAIN_NAME.com และ www.site1.DOMAIN_NAME.com
Root path: /var/www/html2
อีเมล์ที่ติดต่อได้: email@domain.com
# cd /opt/letsencrypt/ # ./letsencrypt-auto --text --agree-tos --email email@domain.com certonly --renew-by-default --webroot --webroot-path /var/www/html2 -d site1.DOMAIN_NAME.com -d www.site1.DOMAIN_NAME.com Updating letsencrypt and virtual environment dependencies...... Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/ letsencrypt-auto --text --agree-tos --email email@domain.com certonly --renew-by-default --webroot --webroot-path /var/www/html2 -d site1.DOMAIN_NAME.com -d www.site1.DOMAIN_NAME.com IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/site1.DOMAIN_NAME.com/fullchain.pem. Your cert will expire on 2016-04-12. 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
เมื่อผลการดำเนินการเรียบร้อย จะมี certificate ไฟล์ต่างๆ ที่เกี่ยวข้องที่ Path : /etc/letsencrypt/live/[DOMAIN_NAME]
เช่น /etc/letsencrypt/live/site1.DOMAIN_NAME.com
หลังจากนั้น จึงทำการเพิ่มค่า config สำหรับ SSL ที่ไฟล์ config ของ apache : /etc/httpd/conf/httpd.conf
ตัวอย่าง
<VirtualHost *:443> ServerName site1.DOMAIN_NAME.com DocumentRoot /var/www/html2 CustomLog /var/log/httpd/site1.DOMAIN_NAME.com_access.log combined SSLEngine on SSLCertificateFile /etc/letsencrypt/live/site1.DOMAIN_NAME.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/site1.DOMAIN_NAME.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/site1.DOMAIN_NAME.com/chain.pem </VirtualHost>
บันทึก config ดังกล่าว และ restart service
# systemctl restart httpd.service
ทดสอบเข้าใช้งาน https://site1.DOMAIN_NAME.com และตรวจสอบความถูกต้องของ certificate โดยทดสอบได้กับ https://www.geocerts.com/ssl_checker เป็นต้น
ขั้นตอนการต่ออายุ Certificate
โดยปรกติแล้วการติดตั้ง SSL ที่มีการรับรองจะมีอายุอย่างน้อย 1 ปี แต่ในการใช้งาน Let’s Encrypt จะมีอายุเพียง 90 วันเท่านั้น ดังนั้นแล้วผู้ดูแลสามารถตั้งเป็น crontab เพื่อให้มีการต่ออายุโดยอัตโนมัติได้ดังนี้
# cd /etc/letsencrypt/ # สร้างไฟล์ และเพิ่มค่าตามด้านล่างนี้ # vi site1.DOMAIN_NAME.com.cli rsa-key-size = 2048 server = https://acme-v01.api.letsencrypt.org/directory text = True authenticator = webroot webroot-path = [DOCUMENT ROOT PATH] agree-tos = True renew-by-default = True email = webmaster@DOMAIN_NAME # บันทึกไฟล์ และเรียกคำสั่งกรณีที่ต้องการต่ออายุแบบ manual # /opt/letsencrypt/letsencrypt-auto --config /etc/letsencrypt/site1.DOMAIN_NAME.com.cli -d site1.DOMAIN_NAME.com -d www.site1.DOMAIN_NAME.com certonly && /sbin/service httpd restart Updating letsencrypt and virtual environment dependencies...... Requesting root privileges to run with virtualenv: /root/.local/share/letsencrypt/bin/ letsencrypt --config /etc/letsencrypt/site1.DOMAIN_NAME.com.cli -d site1.DOMAIN_NAME.com -d www.site1.DOMAIN_NAME.com certonly IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/site1.DOMAIN_NAME.com/fullchain.pem. Your cert will expire on 2016-04-18. 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 Redirecting to /bin/systemctl restart httpd.service
หรือสามารถกำหนดให้มีการต่ออายุ certificate ด้วยการตั้ง crontab ของ root โดยกำหนดให้ทำงาน ทุกๆ 60 วัน (แนะนำ) หรือ 85 วัน ทั้งนี้ควรกำหนดค่าจำนวนวันน้อยกว่าอายุของ certificate
# crontab to extend SSL certificate 0 0 */60 * * /opt/letsencrypt/letsencrypt-auto --config /etc/letsencrypt/ site1.DOMAIN_NAME.com.cli -d site1.DOMAIN_NAME.com -d www.site1.DOMAIN_NAME.com certonly && /sbin/service httpd restart
ข้อควรทราบเพิ่มเติม
- Domain หรือ subdomain ที่จะนำมาสร้างจะต้องสามารถ lookup พบและเรียกใช้งาน website ได้ จึงจะสามารถดำเนินการได้
- SSL Certificate มีอายุ 90 วัน
- สำหรับขณะนี้ (Feb 2016) Let’s Encrypt Client คือ BETA SOFTWARE ดังนั้นจึงอาจยังไม่เหมาะกับการใช้งานบน production system
- Let’s Encrypt Client ต้องการใช้งาน python 2.6 หรือ 2.7
- การใช้งาน Let’s Encrypt Client สำหรับ apache/2.x สามารถทำงานได้สะดวก บนระบบ Debian 8+ และ Ubuntu 12.04+
- ข้อมูลเพิ่มเติม https://letsencrypt.readthedocs.org