ค้นหาเว็บไซต์

วิธีการติดตั้ง 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

การทดสอบสภาพแวดล้อมตัวอย่าง

ความต้องการ

  1. ชื่อโดเมนที่จดทะเบียนซึ่งมีบันทึก A ที่ถูกต้องเพื่อชี้กลับไปยังที่อยู่ IP สาธารณะของเซิร์ฟเวอร์ของคุณ
  2. เซิร์ฟเวอร์ 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 ฟรี