ฉันได้ใช้คู่มือนี้เพื่อตั้งค่าการตรวจสอบสิทธิ์ใบรับรองไคลเอ็นต์บน Apache

ฉันตรวจสอบใบรับรองของฉันโดยใช้openssl verifyคำสั่ง (ถูกต้อง) ฉันยังนำเข้าไฟล์ PFX ลงในพวงกุญแจ macOS ของฉันสำเร็จและตั้งค่าเป็น "เชื่อถือเสมอ"

นอกจากนี้ ฉันได้สร้าง.htaccessเอกสารใหม่ใน/adminไดเร็กทอรีของเว็บไซต์และกรอกด้วยสองบรรทัด:

SSLVerifyClient require
SSLVerifyDepth 10

แน่นอนว่าแนวคิดนี้คือการจำกัดการเข้าถึงแผงการดูแลระบบผ่านใบรับรองไคลเอ็นต์

เมื่อฉันเข้าถึง/adminหน้าของฉันใน Chrome ฉันจะได้รับสิ่งนี้: ใส่คำอธิบายภาพที่นี่

ดูเหมือนว่าสิ่งต่างๆจะได้ผล ปัญหาคือว่าเบราว์เซอร์ไม่แจ้งให้ฉันให้ใบรับรองในเครื่องที่ฉันนำเข้าในพวงกุญแจ ซึ่งทำให้ฉันไม่สามารถเข้าถึง/adminทรัพยากรได้จริง

ฉันพลาดอะไรไป

answer

Chrome ไม่รองรับการตรวจสอบสิทธิ์หลังการติดต่อ กล่าวคือ การเจรจา SSL ใหม่ และส่งใบรับรองไคลเอ็นต์เมื่อมีการสร้างการเชื่อมต่อแล้ว เนื่องจาก (จากหน้ารายงานข้อบกพร่องของ Chrome)

Post-handshake authentication has a mess of security, semantics, and DoS issues. (...) Some spec work is needed to make it defined in HTTP/1.1 at all and, more importantly, explicitly undefined in HTTP/2 in favor of a multiplexing-friendly solution (...)

ใน Firefox คุณสามารถเปิดใช้งานได้ แต่ไม่มีการเปิดใช้งานตามค่าเริ่มต้น ด้วยเหตุผลเดียวกันกับที่ Chrome ไม่ได้ใช้งาน

คุณสามารถตรวจสอบรายงานข้อบกพร่อง ( Firefox , Chrome ) สำหรับข้อมูลเพิ่มเติม

ฉันคิดว่าสิ่งที่คุณสามารถทำได้คือตั้งค่าSSLVerifyClientto optionalย้ายไปที่VirtualHostระดับ (ด้วยSSL*คำสั่งใด ๆดังนั้นใบรับรองจะถูกขอในระหว่างการจับมือกัน) และต้องมีใบรับรองใน.htaccessไฟล์ดังนี้:

AuthName "Admin resource"
AuthType Basic
Require ssl-verify-client