หลังจากที่ดำเนินการติดตั้ง 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