Score:1

วางการเชื่อมต่อกับใบรับรองไคลเอ็นต์ที่ไม่ตรงกัน CN ใน nginx TCP reverse proxy

ธง gb

ฉันใช้ nginx เพื่อเพิ่มฟังก์ชัน TLS ที่ด้านบนของเซิร์ฟเวอร์ TCP (Redis) ที่มีอยู่โดยการมอบฉันทะ (โปรดอ่านก่อนที่จะพูดว่า "Redis มีการสนับสนุน TLS ในตัว"):

ลำธาร {
  เซิร์ฟเวอร์ {
    ฟัง 6379 ssl;

    ssl_certificate /etc/ssl/private/tls.crt;
    ssl_certificate_key /etc/ssl/private/tls.key;

    ssl_client_certificate /etc/ssl/private/ca.crt;
    เปิด ssl_verify_client;

    proxy_pass redis:679;
  }
}

อย่างไรก็ตามสิ่งนี้จะยอมรับ ทั้งหมด ใบรับรองไคลเอนต์ที่ลงนามโดย CA ที่ระบุ ฉันต้องการยอมรับเฉพาะใบรับรองไคลเอนต์ที่มี CN เฉพาะ: cn=api. เมื่อพร็อกซี HTTP ฉันสามารถใช้ไฟล์ ถ้า คำสั่งเช่นนี้

ถ้า ($ssl_client_s_dn != "CN=api") {
  กลับ 403;
}

อย่างไรก็ตามดูเหมือนว่า ถ้า คำสั่งเช่นนั้นไม่ได้รับอนุญาตในเซิร์ฟเวอร์สตรีม เป็นวิธีแก้ปัญหาที่ฉันใช้ a แผนที่ คำสั่งไปยังคำขอกำหนดเส้นทางที่ไม่ตรงกับ CN ไปยังอัปสตรีมที่ไม่มีอยู่ดังนี้:

ลำธาร {
  ต้นน้ำ redis_backend {
    เซิร์ฟเวอร์ redis:6379;
  }

  แผนที่ $ssl_client_s_dn $backend_svr {
    "CN=api" redis_backend;
    ค่าว่างเริ่มต้น;
  }

  เซิร์ฟเวอร์ {
    ...

    proxy_pass $backend_svr;
  }
}

อย่างไรก็ตาม ฉันอดไม่ได้ที่จะรู้สึกว่าต้องมีวิธีที่ดีกว่าในการปฏิเสธการเชื่อมต่อสำหรับใบรับรองไคลเอ็นต์ที่ไม่ตรงกัน

โพสต์คำตอบ

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