gRPC sslcontext config
Jestem nowy w gRPC. To, co próbuję zrobić, to wysłać wywołanie ssl gRPC z klienta do serwera. Moje pytanie brzmi „certFile” w poniższym kodzie jako certyfikat klienta lub certyfikat serwera? Jeśli jest to certyfikat klienta, czy muszę dodać certyfikat serwera do mojej listy zaufania, czy też muszę dodać certyfikat klienta do listy zaufania serwera, zanim wykonam połączenie? Doceniam Twoją pomoc.
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
Odpowiedzi
trustManageri keyManagersą wzajemne między klientem / serwerem; menedżer zaufania klienta musi ufać menedżerowi kluczy serwera, a menedżer zaufania serwera musi ufać menedżerowi kluczy klienta (jeśli używa certyfikatów klienta). Jedyną różnicą między klientem a serwerem jest to, że serwer musi mieć menedżera kluczy, a klient musi mieć menedżera zaufania. Jeśli nie określisz menedżera zaufania dla klienta, zostanie użyty domyślny.
Menedżer zaufania to w zasadzie zaufane urzędy certyfikacji (niezależnie od klienta lub serwera). Menedżerowie kluczy zawierają certyfikat tożsamości i klucz prywatny, aby potwierdzić tę tożsamość.
Więc keyManagerpo stronie klienta jest certyfikat klienta. Należy skonfigurować trustManagerpo stronie serwera, aby ufał temu certyfikatowi: albo dołącz sam certyfikat, albo, lepiej, urząd certyfikacji, który podpisał certyfikat klienta. Zasadniczo możesz pozostawić menedżera zaufania klienta jako domyślnego.
Należy pamiętać, że klient wyśle swój certyfikat tylko wtedy, gdy zażąda go serwer. Musisz więc skonfigurować serwer, aby OPTIONALly lub REQUIREcertyfikat klienta:
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);