ฉันเข้าใจ PKI ค่อนข้างดีจากมุมมองแนวคิด - เช่นกุญแจส่วนตัว / กุญแจสาธารณะ - คณิตศาสตร์ที่อยู่เบื้องหลังการใช้แฮชและการเข้ารหัสเพื่อลงนามใบรับรองการลงนามในธุรกรรมหรือเอกสารดิจิทัลเป็นต้นฉันยังทำงานในโครงการที่ openssl ไลบรารี C ถูกใช้กับ certs สำหรับการรักษาความปลอดภัยการสื่อสารและการพิสูจน์ตัวตน ฉันคุ้นเคยอย่างมากกับเครื่องมือบรรทัดคำสั่ง openssl
อย่างไรก็ตามฉันมีประสบการณ์น้อยมากเกี่ยวกับโครงการที่เปิดใช้งาน PKI บนเว็บดังนั้นฉันจึงพยายามออกแบบและกำหนดรหัสโครงการส่วนบุคคลเพื่อทำความเข้าใจกับสิ่งนี้ให้ดีขึ้น
ความต้องการ
นี่คือเว็บไซต์สำหรับธนาคาร ผู้ใช้บริการธนาคารทางอินเทอร์เน็ตทั้งหมดได้รับอนุญาตให้ใช้ใบรับรองใด ๆ ที่ออกโดย CA ที่รู้จักไม่กี่ (verisign, Thawte, entrust เป็นต้น) ธนาคารจะไม่รับผิดชอบต่อการจัดหาใบรับรองสำหรับผู้ใช้ ใบรับรองเหล่านี้จะใช้สำหรับการรับรองความถูกต้องไปยังเว็บไซต์ของธนาคาร แพลตฟอร์ม / ระบบปฏิบัติการ ฯลฯ ยังคงไม่ได้รับการแก้ไข
ออกแบบ
ฉันสงสัยว่าอะไรคือวิธีที่ดีที่สุดในการตรวจสอบสิทธิ์
ฉันเห็นว่า Apache มีวิธีเปิดใช้งาน 2 วิธี ssl - ในกรณีนี้ฉันคิดว่าการนำทางไปยังเว็บไซต์จะขอใบรับรองจากผู้ใช้โดยอัตโนมัติ แต่ฉันไม่แน่ใจว่านี่เพียงพอหรือไม่เพราะดูเหมือนว่าทุกอย่างจะถูกตรวจสอบหรือไม่ว่าใบรับรองนั้นได้รับการลงนามโดย CA ที่เชื่อถือได้หรือไม่และอาจอยู่ในรายการสีขาวของหัวเรื่องของใบรับรอง ฯลฯ แต่นี่ไม่เพียงพอ สำหรับกรณีธนาคารเนื่องจากคุณต้องเชื่อมโยง bankuserid กับใบรับรอง
IIS ดูเหมือนจะมีวิธีที่ฉันสามารถมีใบรับรองที่เก็บไว้สำหรับผู้ใช้แต่ละรายใน Active Directory นี่คือสิ่งที่ฉันเข้าใจจากการอ่านบทความ MSDN ไม่กี่ คุณเปิด SSL แบบ 2 ทางใน IIS จากนั้นเมื่อผู้ใช้พยายามนำทางไปยังเว็บไซต์ IIS จะส่งคำขอไปยังเบราว์เซอร์พร้อมกับรายการ CA ที่อนุมัติแล้วและเบราว์เซอร์จะอนุญาตให้ผู้ใช้เลือกใบรับรองที่เหมาะสมจากใบรับรองของเขา เพื่อแบ็กเอนด์ ฉันสมมติว่า IIS จะทำ 2 สิ่ง
- ตรวจสอบให้แน่ใจว่าผู้ใช้มีรหัสส่วนตัวที่สอดคล้องกับใบรับรอง (โดยอยู่ภายใต้การเจรจาปะหน้า)
- ตามการแมปใบรับรองผู้ใช้โฆษณา IIS จะรายงานชื่อผู้ใช้ไปยังแอปพลิเคชัน
ทำการตรวจสอบความถูกต้องโดยการเรียกฟังก์ชั่น crypto แทนที่จะขึ้นอยู่กับเว็บเซิร์ฟเวอร์ที่จะทำ
- แสดงหน้าจอผู้ใช้ที่เขาอัปโหลดใบรับรองและแอปพลิเคชันช่วยให้มั่นใจว่าผู้ใช้มีรหัสส่วนตัวที่สอดคล้องกับใบรับรอง (โดยขอให้ส่วนหน้าลงนามสตริงบางส่วนโดยใช้ใบรับรอง)
- แอปพลิเคชั่นนี้มีฐานข้อมูลบางส่วนที่เก็บไว้ซึ่งทำให้ผู้ใช้แต่ละคนสามารถแมปกับหมายเลขผู้ใช้ของเขาได้ นี่อาจเป็น
- ใบรับรองทั้งหมดที่สอดคล้องกับหมายเลขผู้ใช้แต่ละคน
- CA และหมายเลขซีเรียลใบรับรองที่สอดคล้องกับ id ผู้ใช้แต่ละราย
ฉันสงสัยว่าวิธีใดที่ใช้กันทั่วไป? อะไรคือการปฏิบัติที่ดีที่สุด? ถ้าฉันจะไปกับ # 3 วิธีที่ดีที่สุดในการทำเช่นนี้คืออะไร?
สิ่งที่สามารถใช้งานกับแอพสมาร์ทโฟนได้อย่างง่ายดายจะเป็นโบนัสเพิ่มเติม
ปรับปรุง
ให้ฉันชี้แจงคำสั่งของฉัน "รหัสส่วนการตรวจสอบตัวเอง" เพราะคำตอบบางอย่างดูเหมือนจะบ่งบอกว่ามันถูกเข้าใจผิด - ฉันไม่ดีเพราะไม่ชัดเจน
นี่ไม่ได้หมายความว่าฉันจะเขียน crypto เอง มันหมายถึงว่าฉันจะเรียกรูทีน crypto อย่างชัดเจนแทนที่จะขึ้นอยู่กับ IIS หรือเว็บเซิร์ฟเวอร์อื่น ๆ โดยปริยาย