ใน nginx.conf ฉันได้เพิ่ม if clause เพื่อกรองการเชื่อมต่อ ssl ตาม cn
ตัวอย่างเช่น
แผนที่ $ssl_client_s_dn $ssl_client_s_dn_cn {
ค่าเริ่มต้น "";
~/CN=(?<CN>[^/]+) $CN;
}
เซิร์ฟเวอร์ {
ฟัง 80 default_server;
server_name เซิร์ฟเวอร์ nginx;
ส่งคืน 301 https://$server_name$request_uri;
ฟัง 443 ssl;
ฟัง [::]:443 ssl;
server_name เซิร์ฟเวอร์ nginx;
ssl_certificate /path/to/server/cert.pem
ssl_certificate_key /path/to/nginx-server/privatekey.pem
ที่ตั้ง / {
ถ้า ($ssl_client_s_dn_cn !~ "ลูกค้า") {
กลับ 403;
}
รูท /usr/share/nginx/html;
ดัชนี index.html index.htm;
}
}
ตอนนี้จากบรรทัดคำสั่งฉันพยายามขดโดยให้ใบรับรองที่มี DN คล้ายกับ C=GB,ST=ลอนดอน,L=เมือง,O=MyOrg,OU=myOU,CN=ไคลเอนต์
ฉันได้รับข้อผิดพลาด 403
ฉันลองใช้ใบรับรองอื่นด้วย โดยไม่คำนึงถึงใบรับรอง DN/CN ฉันสังเกตเห็นว่า Nginx ส่งคืน 403
ในบันทึกการเข้าถึง ฉันพยายามบันทึก $ssl_client_s_dn
ค่าในบันทึก แต่เป็นค่าว่าง
ผมเอามาอ้างอิงจาก http://nginx.org/en/docs/http/ngx_http_ssl_module.html
ฉันพลาดอะไรไปที่นี่?
อัปเดต:
ถ้าฉันฮาร์ดโค้ดค่าในฟังก์ชันต่อไปนี้เพื่อส่งคืนไคลเอนต์ก็ใช้งานได้ดี:
แผนที่ $ssl_client_s_dn $ssl_client_s_dn_cn {
"ลูกค้า" เริ่มต้น;
}
ฉันสังเกตเห็นว่าค่าของ ssl_client_s_dn อาจเป็นค่าว่างตามบันทึกของ nginx มีบางอย่างเกี่ยวกับการเปิดใช้งานโมดูล ngx_http_ssl_module หรือไม่
ฉันตรวจสอบแล้ว $ nginx V
ฉันคิดว่าโมดูลอยู่ในรายการ
เอาต์พุตแนบอยู่ในรูปภาพ
ไม่แน่ใจว่าฉันพลาดอะไรไป! ความช่วยเหลือใด ๆ โปรด?
ขอบคุณ,
เจ๊