gRPC sslcontext config
Sono nuovo in gRPC. Quello che sto cercando di fare è inviare una chiamata gRPC ssl da un client a un server. La mia domanda è "certFile" nel codice seguente, un certificato client o un certificato server? Se si tratta di un certificato client, devo aggiungere il certificato del server al mio elenco di attendibilità o devo aggiungere il certificato del client all'elenco di attendibilità del server prima di effettuare la chiamata? Apprezzo il tuo aiuto.
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
Risposte
trustManagere keyManagersono reciproci tra client / server; il gestore della fiducia del client deve fidarsi del gestore delle chiavi del server e il gestore della fiducia del server deve fidarsi del gestore delle chiavi del client (se si utilizzano i certificati del client). L'unica differenza tra client e server è che il server deve avere un key manager e il client deve avere un trust manager. Se non specifichi un gestore di fiducia per il client, verrà utilizzato un valore predefinito.
Il trust manager è fondamentalmente le autorità di certificazione che sono attendibili (indipendentemente dal client o dal server). I gestori delle chiavi contengono il certificato di identità e la chiave privata per dimostrare tale identità.
Quindi keyManagersul lato client è per un certificato client. Dovresti configurare il trustManagerlato server in modo che consideri attendibile il certificato: includi il certificato stesso o, meglio, l'autorità di certificazione che ha firmato il certificato del client. In genere puoi lasciare il gestore fiduciario del cliente come predefinito.
Notare che il client invierà il suo certificato solo se il server lo richiede. Quindi è necessario configurare il server per OPTIONALly o REQUIREil certificato client:
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);