Score:0

ปฏิเสธการเชื่อมต่อตามรูปแบบใน nginx

ธง vn

ใน 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 ฉันคิดว่าโมดูลอยู่ในรายการ

เอาต์พุตแนบอยู่ในรูปภาพ ป้อนคำอธิบายรูปภาพที่นี่

ไม่แน่ใจว่าฉันพลาดอะไรไป! ความช่วยเหลือใด ๆ โปรด?

ขอบคุณ, เจ๊

Ivan Shatsky avatar
gr flag
ใช้ `,` ถ่านแทน `/` อย่างที่แสดงใน [นี้](https://stackoverflow.com/a/64899673/7121513) คำตอบ
java_enthu avatar
vn flag
ขอบคุณสำหรับความคิดเห็น @IvanShatsky ฉันพบว่าปัญหาเกิดจากคำสั่งที่ขาดหายไป ฉันจะโพสต์เป็นคำตอบเพื่อเป็นประโยชน์กับผู้อื่น ขอขอบคุณที่มีคนดูคำถามและโพสต์ความคิดเห็น ขอบคุณ.
Score:0
ธง vn

ฉันจัดการเพื่อแก้ไขมัน โพสต์วิธีแก้ไขที่นี่เผื่อว่าจะสามารถช่วยคนในเรือลำเดียวกันได้

ในการกำหนดค่าของฉันบิตที่ขาดหายไปคือ ssl_verify_client เป็นทางเลือก; จนกว่าเราจะระบุว่าฉันได้เรียนรู้ว่า เว้นแต่เราจะกล่าวถึง ssl_verify_client หรือตัวเลือก ตัวแปร $ssl_client_s_dn จะไม่ถูกตั้งค่า มันจะทำให้การพิมพ์ว่างเปล่า

การเข้าใจถึงเบื้องหลัง เป็นเรื่องสมเหตุสมผลที่หากไม่เปิดใช้งานการยืนยันไคลเอนต์ เซิร์ฟเวอร์จะทำอะไรกับไคลเอนต์ไคลเอ็นต์ภายใต้ DN อย่างไรก็ตาม ฉันจะมีความสุขมากกว่านี้หากบันทึกของ nginx จะกล่าวถึงคำสั่งที่ขาดหายไป ฉันต้องคิดออกโดยการลองผิดลองถูก แต่ก็ดีใจที่ในที่สุดก็ได้ผล

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา