gRPC sslcontext config
ฉันยังใหม่กับ gRPC สิ่งที่ฉันพยายามทำคือส่งการโทร ssl gRPC จากไคลเอนต์ไปยังเซิร์ฟเวอร์ คำถามของฉันคือ 'certFile' ในรหัสต่อไปนี้ใบรับรองไคลเอนต์หรือใบรับรองเซิร์ฟเวอร์? หากเป็นใบรับรองไคลเอ็นต์ฉันจำเป็นต้องเพิ่มใบรับรองเซิร์ฟเวอร์ในรายการความน่าเชื่อถือของฉันหรือฉันต้องเพิ่มใบรับรองไคลเอ็นต์ในรายการความน่าเชื่อถือของเซิร์ฟเวอร์ก่อนที่จะโทรออกหรือไม่ ขอบคุณที่คุณช่วย.
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
คำตอบ
trustManagerและkeyManagerเป็นการแลกเปลี่ยนระหว่างไคลเอนต์ / เซิร์ฟเวอร์ ผู้จัดการความน่าเชื่อถือของลูกค้าต้องไว้วางใจตัวจัดการคีย์ของเซิร์ฟเวอร์และผู้จัดการความน่าเชื่อถือของเซิร์ฟเวอร์จำเป็นต้องไว้วางใจตัวจัดการคีย์ของลูกค้า (หากใช้ใบรับรองไคลเอ็นต์) ความแตกต่างเพียงอย่างเดียวระหว่างไคลเอนต์และเซิร์ฟเวอร์คือเซิร์ฟเวอร์ต้องมีตัวจัดการคีย์และไคลเอนต์ต้องมีผู้จัดการความน่าเชื่อถือ หากคุณไม่ระบุผู้จัดการความน่าเชื่อถือสำหรับลูกค้าระบบจะใช้ค่าเริ่มต้น
ผู้จัดการความน่าเชื่อถือโดยพื้นฐานแล้วเป็นผู้ออกใบรับรองที่เชื่อถือได้ (ไม่ขึ้นอยู่กับไคลเอนต์หรือเซิร์ฟเวอร์) ผู้จัดการคีย์มีใบรับรองข้อมูลประจำตัวและคีย์ส่วนตัวเพื่อพิสูจน์ตัวตนดังกล่าว
ดังนั้นkeyManagerในฝั่งไคลเอ็นต์คือใบรับรองไคลเอ็นต์ คุณจะต้องกำหนดค่าtrustManagerบนฝั่งเซิร์ฟเวอร์เพื่อให้เชื่อถือใบรับรองนั้น: รวมใบรับรองเองหรือที่ดีกว่าคือ Certificate Authority ที่ลงนามในใบรับรองของไคลเอ็นต์ โดยทั่วไปคุณสามารถปล่อยให้ผู้จัดการความน่าเชื่อถือของลูกค้าเป็นค่าเริ่มต้นได้
โปรดทราบว่าไคลเอนต์จะส่งใบรับรองเฉพาะเมื่อเซิร์ฟเวอร์ร้องขอเท่านั้น ดังนั้นคุณต้องกำหนดค่าเซิร์ฟเวอร์เป็นOPTIONALly หรือREQUIREใบรับรองไคลเอ็นต์:
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);