gRPC sslcontext config
Sep 28 2020
私はgRPCを初めて使用します。私がやろうとしているのは、クライアントからサーバーにsslgRPC呼び出しを送信することです。私の質問は、次のコードの「certFile」がクライアント証明書またはサーバー証明書ですか?クライアント証明書の場合、電話をかける前にサーバー証明書を信頼リストに追加する必要がありますか、それともクライアント証明書をサーバーの信頼リストに追加する必要がありますか?あなたの助けに感謝。
SslContext sslcontext = GrpcSslContexts.forClient()
.trustManager(caFile)
.keyManager(certFile, keyFile)
.build();
回答
1 EricAnderson Sep 28 2020 at 22:37
trustManagerそしてkeyManager、クライアント/サーバー間の往復です。クライアントのトラストマネージャーはサーバーのキーマネージャーを信頼する必要があり、サーバーのトラストマネージャーはクライアントのキーマネージャーを信頼する必要があります(クライアント証明書を使用している場合)。クライアントとサーバーの唯一の違いは、サーバーにはキーマネージャーが必要であり、クライアントにはトラストマネージャーが必要です。クライアントにトラストマネージャーを指定しない場合は、デフォルトが使用されます。
トラストマネージャーは、基本的に、(クライアントまたはサーバーに関係なく)信頼される認証局です。キーマネージャーには、ID証明書とそのIDを証明する秘密キーが含まれています。
したがってkeyManager、クライアント側はクライアント証明書用です。trustManagerその証明書を信頼するようにサーバー側で構成する必要があります。証明書自体を含めるか、クライアントの証明書に署名した認証局を含めることをお勧めします。通常、クライアントのトラストマネージャーはデフォルトのままにしておくことができます。
クライアントは、サーバーが証明書を要求した場合にのみ証明書を送信することに注意してください。したがって、サーバーをOPTIONALlyまたはREQUIREクライアント証明書に構成する必要があります。
sslContextBuilder.clientAuth(ClientAuth.REQUIRE);