การตั้งค่า: แอปพลิเคชันไคลเอนต์ .NET (4.6) เชื่อมต่อกับบริการ SOAP ระยะไกลผ่าน HTTPS บริการระยะไกลสามารถกำหนดค่าให้ต้องมีใบรับรองไคลเอ็นต์หรือไม่ก็ได้
สิ่งที่ฉันกำลังมองหาเป็นคำตอบคือคำอธิบายที่เป็นไปได้ว่าทำไมสถานการณ์ # 2 ล้มเหลว ... 3 สถานการณ์ต่อไปนี้ได้รับการทดสอบทั้งหมดโดยใช้ฐานรหัสเดียวกันทุกประการ เปลี่ยนเฉพาะใบรับรองที่เกี่ยวข้องและใบรับรองไคลเอ็นต์จำเป็นหรือไม่ บริการ.
สถานการณ์ #1 - ไม่ต้องใช้ใบรับรองไคลเอ็นต์
สถานการณ์ #2 - ต้องการใบรับรองไคลเอ็นต์ ใช้ใบรับรอง A
- ใบรับรอง A ได้รับการติดตั้งใน Windows ที่ฝั่งไคลเอนต์ (ร้านคอมพิวเตอร์ในพื้นที่)
- ใบรับรองถูกต้อง 2048 บิต ไม่ใช่ไวด์การ์ด ใช้สำเร็จสำหรับการตรวจสอบสิทธิ์เซิร์ฟเวอร์ในบริการอื่นที่ไม่เกี่ยวข้อง ซึ่งออกโดย GoDaddy Secure Certificate Authority - G2
- มีการแชร์ใบรับรองกับบุคคลระยะไกลที่ดูเหมือนจะรู้ว่ากำลังทำอะไรอยู่
- เมื่อลูกค้าพยายามร้องขอ การจับมือกันล้มเหลว ในฝั่งไคลเอ็นต์ ข้อยกเว้นของ .NET คือ "คำขอถูกยกเลิก: ไม่สามารถสร้างแชนเนลที่ปลอดภัย SSL/TLS" ที่ฝั่งเซิร์ฟเวอร์ ข้อผิดพลาดคือ "ไคลเอนต์ไม่สามารถแสดงใบรับรอง"
สถานการณ์ #3 - ต้องการใบรับรองไคลเอ็นต์ ใช้ใบรับรอง B
- ทุกอย่างเหมือนกับ #2 ทุกประการ ยกเว้นใช้ใบรับรองไคลเอ็นต์อื่น (B)
- ใบรับรองถูกต้อง, 2048 บิต, ไวลด์การ์ด, ใช้สำเร็จสำหรับการตรวจสอบเซิร์ฟเวอร์ในบริการอื่นที่ไม่เกี่ยวข้อง, ออกโดย GeoTrust RSA CA 2018
- ลูกค้าเชื่อมต่อตกลง
สิ่งที่เราเห็นจากบันทึกคือทั้งในสถานการณ์ #2 และ #3 ไคลเอ็นต์และเซิร์ฟเวอร์จะเจรจาเพื่อใช้ TLS 1.2
หลังจากดำเนินการข้างต้นหลายครั้ง ตรวจสอบทุกอย่าง ข้อสรุปเดียวของฉันคือใบรับรอง A เข้ากันไม่ได้กับการตั้งค่า - ไคลเอนต์ .NET ตัดสินใจที่จะไม่นำเสนอ หรือบริการไม่สามารถยอมรับได้ แต่สิ่งที่อาจแตกต่าง / ขาดหายไป?