วิธีการติดตั้ง Let's Encrypt SSL Certificate เพื่อรักษาความปลอดภัย Apache บน RHEL/CentOS 7/6
ขยายบทช่วยสอน Let's Encrypt ล่าสุดเกี่ยวกับใบรับรอง SSL/TLS ฟรี ในบทความนี้เราจะสาธิตวิธีการรับและติดตั้งใบรับรอง SSL/TLS ฟรีที่ออกโดย Let's Encrypt Certificate Authority สำหรับ Apache< เว็บเซิร์ฟเวอร์บน CentOS/RHEL 7/6 และการแจกจ่าย Fedora ด้วยเช่นกัน
หากคุณต้องการติดตั้ง Let's Encrypt สำหรับ Apache บน Debian และ Ubuntu ให้ทำตามคำแนะนำด้านล่าง:
ตั้งค่า Let's Encrypt เพื่อรักษาความปลอดภัย Apache บน Debian และ Ubuntu
การทดสอบสภาพแวดล้อมตัวอย่าง
ความต้องการ
- ชื่อโดเมนที่จดทะเบียนซึ่งมีบันทึก
A
ที่ถูกต้องเพื่อชี้กลับไปยังที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ของคุณ - เซิร์ฟเวอร์ Apache ที่ติดตั้งโดยเปิดใช้งานโมดูล SSL และเปิดใช้งาน Virtual Hosting ในกรณีที่คุณโฮสต์หลายโดเมนหรือโดเมนย่อย
ขั้นตอนที่ 1: ติดตั้ง Apache เว็บเซิร์ฟเวอร์
1. หากยังไม่ได้ติดตั้ง สามารถติดตั้ง httpd daemon ได้โดยใช้คำสั่งด้านล่าง:
yum install httpd
2. เพื่อให้ซอฟต์แวร์เข้ารหัสของ Let’s ทำงานร่วมกับ Apache ได้ โปรดตรวจสอบให้แน่ใจว่าได้ติดตั้งโมดูล SSL/TLS แล้วโดยใช้คำสั่งด้านล่าง:
yum -y install mod_ssl
3. สุดท้าย ให้เริ่มเซิร์ฟเวอร์ Apache ด้วยคำสั่งต่อไปนี้:
systemctl start httpd.service [On RHEL/CentOS 7]
service httpd start [On RHEL/CentOS 6]
ขั้นตอนที่ 2: ติดตั้ง Let's Encrypt SSL Certificate
4. วิธีที่ง่ายที่สุดในการติดตั้งไคลเอนต์ Let’s Encrypt คือการโคลนพื้นที่เก็บข้อมูล GitHub ในระบบไฟล์ของคุณ หากต้องการติดตั้ง git บนระบบของคุณ คุณต้องเปิดใช้งานพื้นที่เก็บข้อมูล Epel ด้วยคำสั่งต่อไปนี้
yum install epel-release
5. เมื่อเพิ่ม Epel repos ในระบบของคุณแล้ว ให้ดำเนินการติดตั้งไคลเอ็นต์ git โดยเรียกใช้คำสั่งด้านล่าง:
yum install git
6. ตอนนี้ เมื่อคุณได้ติดตั้งการขึ้นต่อกันที่จำเป็นทั้งหมดเพื่อจัดการกับ Let's Encrypt แล้ว ให้ไปที่ไดเร็กทอรี /usr/local/
และเริ่มดึงแบบฟอร์มไคลเอ็นต์ Let's Encrypt ที่เก็บ GitHub อย่างเป็นทางการด้วยคำสั่งต่อไปนี้:
cd /usr/local/
git clone https://github.com/letsencrypt/letsencrypt
ขั้นตอนที่ 3: รับใบรับรอง Let's Encrypt SSL ฟรีสำหรับ Apache
7. กระบวนการรับ Let's Encrypt Certificate สำหรับ Apache ฟรีเป็นไปโดยอัตโนมัติสำหรับ CentOS/RHEL ด้วยปลั๊กอิน apache
มาเรียกใช้คำสั่งสคริปต์ Let's Encrypt เพื่อรับใบรับรอง SSL ไปที่ไดเรกทอรีการติดตั้ง Let's Encrypt จาก /usr/local/letsencrypt
และเรียกใช้คำสั่ง letsencrypt-auto
โดยระบุตัวเลือก --apache
และ -d
ตั้งค่าสถานะสำหรับทุกโดเมนย่อยที่คุณต้องการใบรับรอง
cd /usr/local/letsencrypt
./letsencrypt-auto --apache -d your_domain.tld
8. ระบุที่อยู่อีเมลที่จะใช้โดย Let's Encrypt เพื่อกู้คืนคีย์ที่สูญหายหรือแจ้งให้ทราบอย่างเร่งด่วน แล้วกด Enter เพื่อดำเนินการต่อ
9. ยอมรับข้อกำหนดของใบอนุญาตโดยกดปุ่ม Enter
10. บน CentOS/RHEL ตามค่าเริ่มต้น เซิร์ฟเวอร์ Apache ไม่ได้ใช้แนวคิดของการแยกไดเรกทอรีสำหรับโฮสต์ที่เปิดใช้งานจากโฮสต์ที่มีอยู่ (ไม่ได้ใช้งาน) เป็น Debianแข็งแกร่ง > การกระจายตามทำ
นอกจากนี้ โฮสติ้งเสมือนจะถูกปิดใช้งานตามค่าเริ่มต้น คำสั่ง Apache ที่ระบุชื่อของเซิร์ฟเวอร์ (ServerName) ไม่มีอยู่ในไฟล์การกำหนดค่า SSL
เพื่อเปิดใช้งานคำสั่งนี้ Let's Encrypt จะแจ้งให้คุณเลือกโฮสต์เสมือน เนื่องจากไม่พบ Vhost ใด ๆ ให้เลือกไฟล์ ssl.conf
ที่จะแก้ไขโดยอัตโนมัติโดยไคลเอ็นต์ Let's Encrypt แล้วกด Enter เพื่อดำเนินการต่อ
11. จากนั้นเลือกวิธี ง่าย สำหรับคำขอ HTTP แล้วกด Enter เพื่อก้าวไปข้างหน้า
12. สุดท้ายนี้ หากทุกอย่างราบรื่น ข้อความแสดงความยินดีก็ควรปรากฏบนหน้าจอ กด Enter เพื่อปล่อยข้อความแจ้ง
แค่นั้นแหละ! คุณได้ออกใบรับรอง SSL/TLS สำหรับโดเมนของคุณเรียบร้อยแล้ว ตอนนี้คุณสามารถเริ่มเรียกดูเว็บไซต์ของคุณโดยใช้โปรโตคอล HTTPS
ขั้นตอนที่ 4: ทดสอบฟรี มาเข้ารหัสการเข้ารหัสบนโดเมนกัน
13. เพื่อทดสอบความตรงของการจับมือ SSL/TLS ของโดเมนของคุณ โปรดไปที่ลิงก์ด้านล่างและทดสอบใบรับรองของคุณบนโดเมนของคุณ
https://www.ssllabs.com/ssltest/analyze.html
14. หากคุณได้รับรายงานจำนวนมากเกี่ยวกับช่องโหว่ของโดเมนของคุณในการทดสอบที่ดำเนินการ คุณจะต้องแก้ไขช่องโหว่ด้านความปลอดภัยเหล่านั้นอย่างเร่งด่วน
การให้คะแนนโดยรวมของคลาส C ทำให้โดเมนของคุณไม่ปลอดภัยอย่างมาก หากต้องการแก้ไขปัญหาด้านความปลอดภัยเหล่านี้ ให้เปิดไฟล์การกำหนดค่า Apache SSL และทำการเปลี่ยนแปลงต่อไปนี้:
vi /etc/httpd/conf.d/ssl.conf
ค้นหาบรรทัดด้วยคำสั่ง SSLProtocol
และเพิ่ม -SSLv3
ที่ท้ายบรรทัด
เจาะลึกไฟล์ ค้นหาและแสดงความคิดเห็นในบรรทัดด้วย SSLCipherSuite
โดยวาง #
ไว้ข้างหน้า และเพิ่มเนื้อหาต่อไปนี้ใต้บรรทัดนี้:
SSLCipherSuite ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on
SSLOptions +StrictRequire
15. หลังจากที่คุณได้ทำการเปลี่ยนแปลงข้างต้นทั้งหมดแล้ว ให้บันทึกและปิดไฟล์ จากนั้นรีสตาร์ท Apache daemon เพื่อใช้การเปลี่ยนแปลง
systemctl restart httpd.service [On RHEL/CentOS 7]
service httpd restart [On RHEL/CentOS 6]
16. ตอนนี้ ให้ทดสอบสถานะการเข้ารหัสโดเมนของคุณอีกครั้ง โดยไปที่ลิงก์เดียวกันกับด้านบน หากต้องการทำการทดสอบซ้ำให้กดลิงก์ล้างแคชจากเว็บไซต์
https://www.ssllabs.com/ssltest/analyze.html
ตอนนี้คุณควรได้รับคะแนนโดยรวมระดับ A ซึ่งหมายความว่าโดเมนของคุณมีความปลอดภัยสูง
ขั้นตอนที่ 4: ต่ออายุอัตโนมัติมาเข้ารหัสใบรับรองบน Apache
17. ซอฟต์แวร์ Let's Encrypt เวอร์ชันเบต้านี้จะออกใบรับรองที่มีวันหมดอายุหลังจาก 90 วัน ดังนั้น ในการต่ออายุใบรับรอง SSL คุณต้องดำเนินการคำสั่ง letsencrypt-auto
อีกครั้งก่อนวันหมดอายุ โดยใช้ตัวเลือกและแฟล็กเดียวกันกับที่ใช้ในการรับใบรับรองเริ่มต้น
ตัวอย่างวิธีการต่ออายุใบรับรองด้วยตนเองมีดังต่อไปนี้
cd /usr/local/letsencrypt
./letsencrypt-auto certonly --apache --renew-by-default -d your_domain.tld
18. เพื่อให้กระบวนการนี้เป็นไปโดยอัตโนมัติ ให้สร้างสคริปต์ทุบตีต่อไปนี้ที่จัดทำโดย github erikaheidi ในไดเร็กทอรี /usr/local/bin/
โดยมีเนื้อหาดังต่อไปนี้ (สคริปต์ได้รับการแก้ไขเล็กน้อยเพื่อให้สะท้อนถึงไดเร็กทอรีการติดตั้ง Letencrypt ของเรา)
vi /usr/local/bin/le-renew-centos
เพิ่มเนื้อหาต่อไปนี้ลงในไฟล์ le-renew-centos
:
!/bin/bash
domain=$1
le_path='/usr/local/letsencrypt'
le_conf='/etc/letsencrypt'
exp_limit=30;
get_domain_list(){
certdomain=$1
config_file="$le_conf/renewal/$certdomain.conf"
if [ ! -f $config_file ] ; then
echo "[ERROR] The config file for the certificate $certdomain was not found."
exit 1;
fi
domains=$(grep --only-matching --perl-regex "(?<=domains \= ).*" "${config_file}")
last_char=$(echo "${domains}" | awk '{print substr($0,length,1)}')
if [ "${last_char}" = "," ]; then
domains=$(echo "${domains}" |awk '{print substr($0, 1, length-1)}')
fi
echo $domains;
}
if [ -z "$domain" ] ; then
echo "[ERROR] you must provide the domain name for the certificate renewal."
exit 1;
fi
cert_file="/etc/letsencrypt/live/$domain/fullchain.pem"
if [ ! -f $cert_file ]; then
echo "[ERROR] certificate file not found for domain $domain."
exit 1;
fi
exp=$(date -d "`openssl x509 -in $cert_file -text -noout|grep "Not After"|cut -c 25-`" +%s)
datenow=$(date -d "now" +%s)
days_exp=$(echo \( $exp - $datenow \) / 86400 |bc)
echo "Checking expiration date for $domain..."
if [ "$days_exp" -gt "$exp_limit" ] ; then
echo "The certificate is up to date, no need for renewal ($days_exp days left)."
exit 0;
else
echo "The certificate for $domain is about to expire soon. Starting renewal request..."
domain_list=$( get_domain_list $domain )
"$le_path"/letsencrypt-auto certonly --apache --renew-by-default --domains "${domain_list}"
echo "Restarting Apache..."
/usr/bin/systemctl restart httpd
echo "Renewal process finished for domain $domain"
exit 0;
fi
19. ให้สิทธิ์ในการดำเนินการสำหรับสคริปต์ ติดตั้งแพ็คเกจ bc และเรียกใช้สคริปต์เพื่อทดสอบ ใช้ชื่อโดเมนของคุณเป็นพารามิเตอร์ตำแหน่งสำหรับสคริปต์ ออกคำสั่งด้านล่างเพื่อทำขั้นตอนนี้ให้สำเร็จ:
yum install bc
chmod +x /usr/local/bin/le-renew-centos
/usr/local/bin/le-renew-centos your_domain.tld
20. สุดท้าย ใช้การกำหนดเวลา Linux เพิ่มงาน cron ใหม่เพื่อเรียกใช้สคริปต์ทุกๆ สองเดือน รับรองว่าใบรับรองของคุณจะได้รับการอัปเดตก่อนวันหมดอายุ
crontab -e
เพิ่มบรรทัดต่อไปนี้ที่ด้านล่างของไฟล์
0 1 1 */2 * /usr/local/bin/le-renew-centos your_domain.tld >> /var/log/your_domain.tld-renew.log 2>&1
แค่นั้นแหละ! เซิร์ฟเวอร์ Apache ของคุณที่ทำงานบนระบบ CentOS/RHEL กำลังให้บริการเนื้อหา SSL โดยใช้ใบรับรอง Let's Encrypt SSL ฟรี