gRPC sslcontext config
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
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);