การกำหนดค่า Apache ด้วย SSL
คำแนะนำต่อไปนี้ถือว่าคุณต้องการเรียกใช้ทั้งเซิร์ฟเวอร์ที่ปลอดภัย (บนพอร์ต 443
) และเซิร์ฟเวอร์ปกติ (บนพอร์ต 80
). ขั้นแรกคุณต้องกำหนดค่าเซิร์ฟเวอร์เพื่อรับฟังทั้งสองพอร์ต แก้ไขอย่างใดอย่างหนึ่ง /etc/apache2/ports.conf
(ใน Debian สิ่งนี้รวมอยู่ใน apache2.conf
) หรือแก้ไข /etc/apache2/apache2.conf
โดยตรงเพื่อรวมสาย:
ฟัง 80 ฟัง 443
ถัดไปแก้ไข /etc/apache2/sites-enabled/yoursite
เพื่อใช้การตั้งค่า SSL การแยกการตั้งค่าเซิร์ฟเวอร์ปกติและปลอดภัยออกโดยใช้ VirtualHosts เป็นตัวเลือกที่ง่ายที่สุดในแง่ของการบำรุงรักษา การกำหนดค่าใด ๆ นอกส่วนของ VirtualHosts (เช่นการตั้งค่า ServerAdmin) จะใช้กับทั้ง VirtualHosts (และอื่น ๆ )
รุ่นของ Apache 2.4.8 และสูงกว่าคาดว่าใบรับรองเซิร์ฟเวอร์ของคุณจะถูกต่อกับใบรับรองกลางใด ๆ ในไฟล์เดียว หากต้องการดาวน์โหลดไฟล์ที่ถูกโยงจาก SSL.com ให้เลือก Nginx
ลิงค์ดาวน์โหลดในบัญชีพอร์ทัลของคุณ:
อีกทางหนึ่งคุณสามารถเชื่อมต่อใบรับรองที่มีอยู่ของคุณและไฟล์กลางด้วยคำสั่งดังนี้:
$ cat /etc/ssl/private/ca-bundle-client.crt >> /etc/ssl/private/yourdomain.crt
เพิ่มส่วนต่อไปนี้ในไฟล์ปรับแต่งของคุณ:
# ================================================= # SSL /TLS การตั้งค่า # ================================================ = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine บน SSLCertificateFile /etc/ssl/private/yourdomain.chained.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key
หมายเหตุเล็กน้อยเกี่ยวกับการกำหนดค่านี้:
SSLEngine
ต้องเปิดใช้งานเพื่อให้เซิร์ฟเวอร์ใช้ SSLDocumentRoot
ตั้งค่าไดเรกทอรีรากสำหรับโฮสต์เสมือนนี้ ซึ่งหมายความว่าคุณสามารถแยกเนื้อหาที่ปลอดภัยทั้งหมดออกจากเนื้อหาปกติSSLCertificateFile
ควรตั้งค่าเป็นตำแหน่งที่คุณวางไฟล์พร้อมใบรับรองเซิร์ฟเวอร์และเชนระดับกลางSSLCertificateKeyFile
ควรตั้งค่าเป็นตำแหน่งที่คุณวางไฟล์กุญแจส่วนตัวของคุณ
เพิ่มส่วนต่อไปนี้ในไฟล์ปรับแต่งของคุณ:
# ================================================= # SSL /TLS การตั้งค่า # ================================================ = NameVirtualHost *: 443 DocumentRoot "/ var / www / yoursite" SSLEngine บน SSLCertificateFile /etc/ssl/private/yourdomain.crt SSLCertificateKeyFile /etc/ssl/private/myserver.key SSLCertificateChainFile / etc / ssl / private / ca-bundle- client.crt
หมายเหตุเล็กน้อยเกี่ยวกับการกำหนดค่านี้:
SSLEngine
ต้องเปิดใช้งานเพื่อให้เซิร์ฟเวอร์ใช้ SSLDocumentRoot
ตั้งค่าไดเรกทอรีรากสำหรับโฮสต์เสมือนนี้ ซึ่งหมายความว่าคุณสามารถแยกเนื้อหาที่ปลอดภัยทั้งหมดออกจากเนื้อหาปกติSSLCertificateFile, SSLCertificateChainFile,
และSSLCertificateKeyFile
ควรตั้งค่าเป็นตำแหน่งที่คุณวางใบรับรองไฟล์คีย์กลางและส่วนตัวตามลำดับ
ในการรันเซิร์ฟเวอร์ปกติบนพอร์ต 80 ให้เพิ่มส่วนต่อไปนี้ในไฟล์ปรับแต่ง:
NameVirtualHost *: 80 DocumentRoot "/ var / www / yoursite" # การตั้งค่าไดเรกทอรีเฉพาะโฮสต์ตัวเลือก ฯลฯ # ตัวเลือกเหล่านี้ส่วนใหญ่มีแนวโน้มที่จะตั้งอยู่นอกส่วน VirtualHosts #
หลังจากที่คุณบันทึกไฟล์การกำหนดค่าที่แก้ไขแล้วให้รีสตาร์ทเว็บเซิร์ฟเวอร์ หากคุณใช้ข้อความรหัสผ่านในการสร้างใบรับรองคุณจะต้องป้อนเมื่อถูกท้าทาย
การทดสอบ
สร้างเพจ index.html พื้นฐานทุกที่ที่มีไดเร็กทอรีรูทสำหรับเว็บเซิร์ฟเวอร์ของคุณหากคุณยังไม่มีเนื้อหาที่นั่น
จากนั้นชี้เว็บเบราว์เซอร์ของคุณที่ https://www.yoursite.com
. คุณควรเห็นการเชื่อมต่อ SSL เปิดขึ้นและส่งเพจแล้ว หากคุณใช้ใบรับรองที่ลงนามด้วยตนเองเบราว์เซอร์ของคุณจะแสดงข้อความแจ้งเตือนว่าไม่สามารถยืนยันตัวตนของเซิร์ฟเวอร์ คุณสามารถเลือกดูและยอมรับใบรับรองได้ หากใช้ใบรับรองภายนอกทุกอย่างควรเกิดขึ้นโดยไม่มีการแทรกแซง
ตรวจสอบให้แน่ใจด้วยว่าคุณไม่สามารถเข้าถึงเนื้อหาที่มีการป้องกันโดยใช้ http: // หากคุณลองคุณควรได้รับข้อความแสดงข้อผิดพลาด
การแก้ไขปัญหา
หากไม่ทำงานตามที่คาดไว้ก่อนอื่นให้ตรวจสอบว่าเซิร์ฟเวอร์ของคุณกำลังทำงานอยู่โดยใช้ ps -a | grep apache
. หากไม่ได้สิ่งใดกลับมาให้ลองรีสตาร์ทและตรวจสอบข้อความแสดงข้อผิดพลาดบนเทอร์มินัล
ตรวจสอบด้วยว่าการอนุญาตในคีย์และไฟล์ใบรับรองของคุณนั้นตั้งค่าไว้ถูกต้อง (ดูด้านบน) รวมถึงการอนุญาตในไฟล์ HTML ทดสอบและไดเรกทอรีหลัก
จากนั้นตรวจสอบบันทึก คุณควรตรวจสอบทั้งบันทึกเซิร์ฟเวอร์หลักและบันทึก SSL ที่คุณตั้งค่าไว้ในไฟล์กำหนดค่าด้านบน หากคุณไม่ได้รับประโยชน์ใด ๆ ให้ลองเปลี่ยนค่า LogLevel ในไฟล์ config Apache2 เป็น“ debug” รีสตาร์ท Apache2 แล้วทดสอบอีกครั้ง สิ่งนี้ควรให้ข้อมูลล็อกไฟล์มากขึ้น
หากคุณใช้งานเว็บเซิร์ฟเวอร์ปกติบนพอร์ต 80 เช่นกันให้ลองดึงหน้าทดสอบผ่าน http: // แทนที่จะเป็น https: // เพื่อช่วยระบุว่าปัญหาเกิดจากเว็บเซิร์ฟเวอร์หรือด้วยการเชื่อมต่อ SSL โปรดทราบว่าในการตั้งค่าด้านบนไดเรกทอรีรากของเว็บเซิร์ฟเวอร์จะแตกต่างกันสำหรับ http: // และ https: // ดังนั้นคุณจะไม่ (หรือไม่ควร!) เข้าถึงเนื้อหาเดียวกันได้ หากหน้าทดสอบของคุณในไดเรกทอรีราก http: // ทำงานได้ดีและหน้าทดสอบของคุณในไดเรกทอรีราก https: // ไม่ทำงานนั่นจะช่วยให้คุณระบุปัญหาได้
หากปัญหาคือการเชื่อมต่อ SSL เครื่องมือที่มีประโยชน์คือ s_client
ซึ่งเป็นเครื่องมือวินิจฉัยสำหรับการแก้ไขปัญหา TLS/ การเชื่อมต่อ SSL การใช้งานพื้นฐานคือ: /usr/bin/openssl s_client -connect localhost:443
. มีตัวเลือกอื่น ๆ อีกมากมายเช่นกันซึ่งคุณสามารถตรวจสอบเอกสารได้ หากคุณได้รับข้อความแสดงข้อผิดพลาดสิ่งนี้จะช่วยคุณในการค้นหาปัญหา