Конфигурация sslcontext gRPC
Я новичок в gRPC. Что я пытаюсь сделать, так это отправить вызов ssl gRPC от клиента на сервер. Мой вопрос: "certFile" в следующем коде - это сертификат клиента или сертификат сервера? Если это сертификат клиента, нужно ли мне добавить сертификат сервера в мой список доверия или мне нужно добавить сертификат клиента в список доверия сервера, прежде чем я совершу вызов? Ценю твою помощь.
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
Ответы
trustManagerи keyManagerвзаимны между клиентом и сервером; клиентский диспетчер доверия должен доверять диспетчеру ключей сервера, а диспетчер доверия сервера должен доверять диспетчеру ключей клиента (при использовании клиентских сертификатов). Единственная разница между клиентом и сервером заключается в том, что на сервере должен быть диспетчер ключей, а у клиента должен быть диспетчер доверия. Если вы не укажете доверенного менеджера для клиента, будет использоваться значение по умолчанию.
Диспетчер доверия - это в основном доверенные центры сертификации (независимо от клиента или сервера). Диспетчеры ключей содержат сертификат идентификации и закрытый ключ для подтверждения этой личности.
Таким образом, keyManagerна стороне клиента это сертификат клиента. Вам нужно будет настроить trustManagerна стороне сервера доверие к этому сертификату: либо включить сам сертификат, либо, что лучше, центр сертификации, подписавший сертификат клиента. Как правило, вы можете оставить доверительный менеджер клиента по умолчанию.
Обратите внимание, что клиент отправит свой сертификат только в том случае, если его запросит сервер. Итак, вам нужно настроить сервер OPTIONALили REQUIREсертификат клиента:
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);