Конфигурация sslcontext gRPC

Sep 28 2020

Я новичок в gRPC. Что я пытаюсь сделать, так это отправить вызов ssl gRPC от клиента на сервер. Мой вопрос: "certFile" в следующем коде - это сертификат клиента или сертификат сервера? Если это сертификат клиента, нужно ли мне добавить сертификат сервера в мой список доверия или мне нужно добавить сертификат клиента в список доверия сервера, прежде чем я совершу вызов? Ценю твою помощь.
   SslContext sslcontext = GrpcSslContexts.forClient()
        .trustManager(caFile)
        .keyManager(certFile, keyFile) 
        .build();

Ответы

1 EricAnderson Sep 28 2020 at 22:37

trustManagerи keyManagerвзаимны между клиентом и сервером; клиентский диспетчер доверия должен доверять диспетчеру ключей сервера, а диспетчер доверия сервера должен доверять диспетчеру ключей клиента (при использовании клиентских сертификатов). Единственная разница между клиентом и сервером заключается в том, что на сервере должен быть диспетчер ключей, а у клиента должен быть диспетчер доверия. Если вы не укажете доверенного менеджера для клиента, будет использоваться значение по умолчанию.

Диспетчер доверия - это в основном доверенные центры сертификации (независимо от клиента или сервера). Диспетчеры ключей содержат сертификат идентификации и закрытый ключ для подтверждения этой личности.

Таким образом, keyManagerна стороне клиента это сертификат клиента. Вам нужно будет настроить trustManagerна стороне сервера доверие к этому сертификату: либо включить сам сертификат, либо, что лучше, центр сертификации, подписавший сертификат клиента. Как правило, вы можете оставить доверительный менеджер клиента по умолчанию.

Обратите внимание, что клиент отправит свой сертификат только в том случае, если его запросит сервер. Итак, вам нужно настроить сервер OPTIONALили REQUIREсертификат клиента:

sslContextBuilder.clientAuth(ClientAuth.REQUIRE);