ทำไมรูปแบบของ nginx $ ssl_client_i_dn เปลี่ยนไปในทันที


13

เราใช้ใบรับรองด้านลูกค้าสำหรับการตรวจสอบหนึ่งในลูกค้าของเรา

การตั้งค่าของเราคือ: เรามี nginx ต่อหน้าแอปพลิเคชั่น Django ในการตั้งค่า Nginx ของเราเรามีพารามิเตอร์ที่ต้องการที่จะได้รับการตรวจสอบฝั่งไคลเอ็นต์ใบรับรองที่เกิดขึ้นจริงในการทำงาน ( ssl_client_certificate, ssl_verify_clientฯลฯ ) และ

uwsgi_param X-Client-Verify $ssl_client_verify;
uwsgi_param X-Client-DN $ssl_client_s_dn;
uwsgi_param X-SSL-Issuer $ssl_client_i_dn;

ซึ่งหมายความว่าเราได้รับคุณค่าของตัวแปรเหล่านั้นลงในแอพ Django ของเรา จากนั้นแอป Django จะใช้ข้อมูลนี้เพื่อระบุผู้ใช้ที่กำลังเชื่อมต่อและอนุญาตพวกเขา

เราประสบความสำเร็จในการใช้สิ่งนี้เป็นเวลาหลายเดือนโดยไม่มีปัญหาใด ๆ เมื่อเราเริ่มได้รับรายงานเกี่ยวกับคนที่ไม่สามารถเข้าสู่ระบบโดยใช้ใบรับรอง ปรากฏว่ารูปแบบของ$ssl_client_s_dnและ$ssl_client_i_dnค่ามีการเปลี่ยนแปลงจากรูปแบบที่คั่นด้วยเครื่องหมายสแลช:

 /C=SE/O=Some organziation/CN=Some CA

เป็นรูปแบบที่คั่นด้วยเครื่องหมายจุลภาค:

CN=Some CA,O=Some organization,C=SE

การแก้ปัญหานี้เป็นเรื่องง่าย แต่ฉันไม่เข้าใจว่าทำไม ดังนั้นคำถามของฉันเป็นจริง:

  1. คุณค่าของการ$ssl_client_s_dnมาจากที่ใด มันถูกกำหนดโดย nginx? ลูกค้า?
  2. มีเอกสาร / ข้อมูลจำเพาะของรูปแบบที่ค่านี้สามารถมีและมีชื่อหรือไม่?

คำตอบ:


18

พวกเขาเปลี่ยนไปเพราะ nginx เปลี่ยนพวกมันในรีลีส 1.11.6 ดังที่แสดงในรายการเปลี่ยนแปลง:

    *) Change: format of the $ssl_client_s_dn and $ssl_client_i_dn variables
       has been changed to follow RFC 2253 (RFC 4514); values in the old
       format are available in the $ssl_client_s_dn_legacy and
       $ssl_client_i_dn_legacy variables.

หากคุณต้องการหลีกเลี่ยงสิ่งนี้คุณควรยึดติดกับการปล่อยที่เสถียรแทนที่จะปล่อยการฉีดยาที่ไม่เสถียร คุณควรทดสอบก่อนที่จะอัพเกรดการผลิตอย่างสุ่มสี่สุ่มห้า

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.