gRPC sslcontext config

Sep 28 2020

Sou novo no gRPC. O que estou tentando fazer é enviar uma chamada ssl gRPC de um cliente para um servidor. Minha pergunta é o 'certFile' no código a seguir, um certificado de cliente ou certificado de servidor? Se for um certificado de cliente, preciso adicionar o certificado do servidor à minha lista de confiança ou preciso adicionar o certificado do cliente à lista de confiança do servidor antes de fazer a chamada? Agradeço sua ajuda.
   SslContext sslcontext = GrpcSslContexts.forClient()
        .trustManager(caFile)
        .keyManager(certFile, keyFile) 
        .build();

Respostas

1 EricAnderson Sep 28 2020 at 22:37

trustManagere keyManagersão recíprocos entre cliente / servidor; o gerenciador de confiança do cliente precisa confiar no gerenciador de chaves do servidor e o gerenciador de confiança do servidor precisa confiar no gerenciador de chaves do cliente (se estiver usando certificados de cliente). A única diferença entre cliente e servidor é que o servidor deve ter um gerenciador de chaves e o cliente deve ter um gerenciador de confiança. Se você não especificar um gerenciador de confiança para o cliente, um padrão será usado.

O gerenciador de confiança é basicamente as Autoridades de Certificação confiáveis ​​(independente do cliente ou servidor). Os gerenciadores de chaves contêm o certificado de identidade e a chave privada para provar essa identidade.

Portanto, keyManagerdo lado do cliente é para um certificado de cliente. Você precisaria configurar o trustManagerservidor para confiar nesse certificado: inclua o próprio certificado ou, melhor, a autoridade de certificação que assinou o certificado do cliente. Geralmente, você pode deixar o gerenciador de confiança do cliente como o padrão.

Observe que o cliente só enviará seu certificado se o servidor solicitar. Portanto, você precisa configurar o servidor para OPTIONALly ou REQUIREo certificado do cliente:

sslContextBuilder.clientAuth(ClientAuth.REQUIRE);