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

ซีรี่ส์ RHCE: การใช้ HTTPS ผ่าน TLS โดยใช้ Network Security Service (NSS) สำหรับ Apache - ตอนที่ 8


หากคุณเป็นผู้ดูแลระบบที่มีหน้าที่ดูแลรักษาและรักษาความปลอดภัยเว็บเซิร์ฟเวอร์ คุณไม่สามารถที่จะไม่ทุ่มเทความพยายามอย่างเต็มที่เพื่อให้แน่ใจว่าข้อมูลที่ส่งโดยหรือส่งผ่านเซิร์ฟเวอร์ของคุณจะได้รับการปกป้องตลอดเวลา

เพื่อให้การสื่อสารที่ปลอดภัยยิ่งขึ้นระหว่างเว็บไคลเอ็นต์และเซิร์ฟเวอร์ โปรโตคอล HTTPS ถือกำเนิดขึ้นจากการผสมผสานระหว่าง HTTP และ SSL ( Secure Sockets Layer) หรือล่าสุดคือ TLS (Transport Layer Security)

เนื่องจากการละเมิดความปลอดภัยที่ร้ายแรง SSL จึงถูกเลิกใช้งานและหันไปใช้ TLS ที่แข็งแกร่งกว่า ด้วยเหตุนี้ ในบทความนี้ เราจะอธิบายวิธีรักษาความปลอดภัยการเชื่อมต่อระหว่างเว็บเซิร์ฟเวอร์และไคลเอนต์โดยใช้ TLS

บทช่วยสอนนี้จะถือว่าคุณได้ติดตั้งและกำหนดค่าเว็บเซิร์ฟเวอร์ Apache ของคุณแล้ว ถ้าไม่ โปรดดูบทความต่อไปนี้ในเว็บไซต์นี้ก่อนดำเนินการต่อ

  1. ติดตั้ง LAMP (Linux, MySQL/MariaDB, Apache และ PHP) บน RHEL/CentOS 7

การติดตั้ง OpenSSL และยูทิลิตี้

ก่อนอื่น ตรวจสอบให้แน่ใจว่า Apache กำลังทำงานอยู่ และทั้ง http และ https ได้รับอนุญาตผ่านไฟร์วอลล์:


systemctl start http
systemctl enable http
firewall-cmd --permanent –-add-service=http
firewall-cmd --permanent –-add-service=https

จากนั้นติดตั้งแพ็คเกจที่จำเป็น:


yum update && yum install openssl mod_nss crypto-utils

ข้อสำคัญ: โปรดทราบว่าคุณสามารถแทนที่ mod_nss ด้วย mod_ssl ในคำสั่งด้านบนได้ หากคุณต้องการใช้ OpenSSL ไลบรารี่แทน NSS (Network Security Service) เพื่อใช้ TLS (อันไหนที่จะใช้ก็ขึ้นอยู่กับคุณทั้งหมด แต่เราจะใช้ NSS ในบทความนี้เนื่องจากมีประสิทธิภาพมากกว่า ตัวอย่างเช่น รองรับมาตรฐานการเข้ารหัสล่าสุด เช่น PKCS #11)

สุดท้าย ให้ถอนการติดตั้ง mod_ssl หากคุณเลือกใช้ mod_nss หรือในทางกลับกัน


yum remove mod_ssl

การกำหนดค่า NSS (บริการรักษาความปลอดภัยเครือข่าย)

หลังจากติดตั้ง mod_nss แล้ว ไฟล์การกำหนดค่าเริ่มต้นจะถูกสร้างขึ้นเป็น /etc/httpd/conf.d/nss.conf จากนั้น คุณควรตรวจสอบให้แน่ใจว่าคำสั่ง Listen และ VirtualHost ทั้งหมดชี้ไปที่พอร์ต 443 (พอร์ตเริ่มต้นสำหรับ HTTPS):


Listen 443
VirtualHost _default_:443

จากนั้นรีสตาร์ท Apache และตรวจสอบว่าโหลดโมดูล mod_nss แล้วหรือไม่:


apachectl restart
httpd -M | grep nss

ถัดไป ควรทำการแก้ไขต่อไปนี้ในไฟล์การกำหนดค่า /etc/httpd/conf.d/nss.conf:

1. ระบุไดเรกทอรีฐานข้อมูล NSS คุณสามารถใช้ไดเร็กทอรีเริ่มต้นหรือสร้างไดเร็กทอรีใหม่ได้ ในบทช่วยสอนนี้ เราจะใช้ค่าเริ่มต้น:


NSSCertificateDatabase /etc/httpd/alias

2. หลีกเลี่ยงการป้อนข้อความรหัสผ่านด้วยตนเองในแต่ละระบบ โดยเริ่มต้นด้วยการบันทึกรหัสผ่านลงในไดเร็กทอรีฐานข้อมูลใน /etc/httpd/nss-db-password.conf:


NSSPassPhraseDialog file:/etc/httpd/nss-db-password.conf

โดยที่ /etc/httpd/nss-db-password.conf มีเฉพาะบรรทัดต่อไปนี้ และ mypassword คือรหัสผ่านที่คุณจะตั้งในภายหลังสำหรับฐานข้อมูล NSS:


internal:mypassword

นอกจากนี้ ควรตั้งค่าการอนุญาตและความเป็นเจ้าของเป็น 0640 และ root:apache ตามลำดับ:


chmod 640 /etc/httpd/nss-db-password.conf
chgrp apache /etc/httpd/nss-db-password.conf

3. Red Hat แนะนำให้ปิดการใช้งาน SSL และ TLS ทุกเวอร์ชันก่อนหน้า TLSv1.0 เนื่องจาก >ช่องโหว่ POODLE SSLv3 (ข้อมูลเพิ่มเติมที่นี่)

ตรวจสอบให้แน่ใจว่าทุกอินสแตนซ์ของคำสั่ง NSSProtocol อ่านดังนี้ (คุณจะพบเพียงอินสแตนซ์เดียวหากคุณไม่ได้โฮสต์โฮสต์เสมือนอื่น):


NSSProtocol TLSv1.0,TLSv1.1

4. Apache จะปฏิเสธที่จะรีสตาร์ทเนื่องจากเป็นใบรับรองที่ลงนามด้วยตนเองและจะไม่รู้จักผู้ออกว่าถูกต้อง ด้วยเหตุนี้ ในกรณีนี้ คุณจะต้องเพิ่ม:


NSSEnforceValidCerts off

5. แม้ว่าจะไม่ได้บังคับอย่างเคร่งครัด แต่สิ่งสำคัญคือต้องตั้งรหัสผ่านสำหรับฐานข้อมูล NSS:


certutil -W -d /etc/httpd/alias