gRPC sslcontext config
मैं जीआरपीसी में नया हूं। मैं जो करने की कोशिश कर रहा हूं वह क्लाइंट से सर्वर पर ssl gRPC कॉल भेजने के लिए है। मेरा प्रश्न निम्नलिखित कोड में 'सर्टिफिकेट' है जो क्लाइंट सर्टिफिकेट या सर्वर सर्टिफिकेट है? यदि यह एक क्लाइंट सर्टिफ़िकेट है, तो क्या मुझे अपने ट्रस्ट लिस्ट में सर्वर सर्टिफ़िकेट को जोड़ने की ज़रूरत है या क्या मुझे कॉल करने से पहले क्लाइंट सर्टिफ़िकेट को सर्वर की ट्रस्ट सूची में जोड़ने की आवश्यकता है? आपकी सहायता की सराहना।
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
जवाब
trustManagerऔर keyManagerग्राहक / सर्वर पर पारस्परिक हैं; क्लाइंट के ट्रस्ट मैनेजर को सर्वर के कुंजी प्रबंधक पर भरोसा करने की आवश्यकता होती है और सर्वर के ट्रस्ट मैनेजर को क्लाइंट के मुख्य प्रबंधक (यदि क्लाइंट सेर्ट्स का उपयोग करना) पर भरोसा करना पड़ता है। क्लाइंट और सर्वर के बीच एकमात्र अंतर यह है कि सर्वर में एक मुख्य प्रबंधक होना चाहिए और ग्राहक के पास एक विश्वास प्रबंधक होना चाहिए। यदि आप क्लाइंट के लिए एक ट्रस्ट मैनेजर निर्दिष्ट नहीं करते हैं, तो एक डिफ़ॉल्ट का उपयोग किया जाएगा।
ट्रस्ट मैनेजर मूल रूप से सर्टिफिकेट अथॉरिटीज होते हैं जिन पर भरोसा किया जाता है (क्लाइंट या सर्वर से स्वतंत्र)। मुख्य प्रबंधकों में पहचान प्रमाण पत्र और उस पहचान को साबित करने के लिए निजी कुंजी होती है।
तो keyManagerपर क्लाइंट साइड क्लाइंट प्रमाणपत्र के लिए है। आपको trustManagerउस प्रमाणपत्र पर भरोसा करने के लिए सर्वर-साइड को कॉन्फ़िगर करने की आवश्यकता होगी : या तो प्रमाण पत्र को शामिल करें या, बेहतर, प्रमाणपत्र प्राधिकारी जो क्लाइंट के प्रमाण पत्र पर हस्ताक्षर करता है। आप आम तौर पर क्लाइंट के ट्रस्ट मैनेजर को डिफ़ॉल्ट के रूप में छोड़ सकते हैं।
ध्यान दें कि क्लाइंट केवल अपना प्रमाणपत्र भेजेगा यदि सर्वर अनुरोध करता है। तो आपको सर्वर को क्लाइंट OPTIONALया REQUIREक्लाइंट सर्टिफिकेट में कॉन्फ़िगर करने की आवश्यकता है :
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);