gRPC sslcontext config

Sep 28 2020

Ich bin neu bei gRPC. Ich versuche, einen SSL-gRPC-Aufruf von einem Client an einen Server zu senden. Meine Frage ist die 'certFile' im folgenden Code ein Client-Zertifikat oder Server-Zertifikat? Wenn es sich um ein Client-Zertifikat handelt, muss ich das Server-Zertifikat zu meiner Vertrauensliste hinzufügen oder muss ich das Client-Zertifikat zur Vertrauensliste des Servers hinzufügen, bevor ich den Anruf tätige? Schätze deine Hilfe.
   SslContext sslcontext = GrpcSslContexts.forClient()
        .trustManager(caFile)
        .keyManager(certFile, keyFile) 
        .build();

Antworten

1 EricAnderson Sep 28 2020 at 22:37

trustManagerund keyManagersind über Client / Server hinweg wechselseitig; Der Vertrauensmanager des Clients muss dem Schlüsselmanager des Servers vertrauen, und der Vertrauensmanager des Servers muss dem Schlüsselmanager des Clients vertrauen (wenn Clientzertifikate verwendet werden). Der einzige Unterschied zwischen Client und Server besteht darin, dass der Server einen Schlüsselmanager und der Client einen Vertrauensmanager haben muss. Wenn Sie keinen Vertrauensmanager für den Client angeben, wird ein Standard verwendet.

Der Vertrauensmanager sind im Grunde die vertrauenswürdigen Zertifizierungsstellen (unabhängig von Client oder Server). Schlüsselmanager enthalten das Identitätszertifikat und den privaten Schlüssel, um diese Identität nachzuweisen.

Also keyManagerauf Client-Seite ist für ein Client - Zertifikat. Sie müssten das trustManagerServer konfigurieren, um diesem Zertifikat zu vertrauen: Geben Sie entweder das Zertifikat selbst oder besser die Zertifizierungsstelle an, die das Zertifikat des Clients signiert hat. Im Allgemeinen können Sie den Vertrauensmanager des Clients als Standard festlegen.

Beachten Sie, dass der Client sein Zertifikat nur sendet, wenn der Server es anfordert. Sie müssen also den Server für OPTIONALly oder REQUIREdas Client-Zertifikat konfigurieren :

sslContextBuilder.clientAuth(ClientAuth.REQUIRE);