ซีรี่ส์ RHCE: การใช้ HTTPS ผ่าน TLS โดยใช้ Network Security Service (NSS) สำหรับ Apache - ตอนที่ 8
หากคุณเป็นผู้ดูแลระบบที่มีหน้าที่ดูแลรักษาและรักษาความปลอดภัยเว็บเซิร์ฟเวอร์ คุณไม่สามารถที่จะไม่ทุ่มเทความพยายามอย่างเต็มที่เพื่อให้แน่ใจว่าข้อมูลที่ส่งโดยหรือส่งผ่านเซิร์ฟเวอร์ของคุณจะได้รับการปกป้องตลอดเวลา
เพื่อให้การสื่อสารที่ปลอดภัยยิ่งขึ้นระหว่างเว็บไคลเอ็นต์และเซิร์ฟเวอร์ โปรโตคอล HTTPS ถือกำเนิดขึ้นจากการผสมผสานระหว่าง HTTP และ SSL ( Secure Sockets Layer) หรือล่าสุดคือ TLS (Transport Layer Security)
เนื่องจากการละเมิดความปลอดภัยที่ร้ายแรง SSL จึงถูกเลิกใช้งานและหันไปใช้ TLS ที่แข็งแกร่งกว่า ด้วยเหตุนี้ ในบทความนี้ เราจะอธิบายวิธีรักษาความปลอดภัยการเชื่อมต่อระหว่างเว็บเซิร์ฟเวอร์และไคลเอนต์โดยใช้ TLS
บทช่วยสอนนี้จะถือว่าคุณได้ติดตั้งและกำหนดค่าเว็บเซิร์ฟเวอร์ Apache ของคุณแล้ว ถ้าไม่ โปรดดูบทความต่อไปนี้ในเว็บไซต์นี้ก่อนดำเนินการต่อ
- ติดตั้ง 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