gRPC ssl上下文配置

gRPC sslcontext config


我是 gRPC 的新手。 我想要做的是将 ssl gRPC 调用从客户端发送到服务器。 我的问题是以下代码中的 'certFile' 是客户端证书还是服务器证书? 如果它是客户端证书,我是否需要将服务器证书添加到我的信任列表中,或者我是否需要在调用之前将客户端证书添加到服务器的信任列表中? 感谢你的帮助。
   SslContext sslcontext = GrpcSslContexts.forClient()
        .trustManager(caFile)
        .keyManager(certFile, keyFile) 
        .build();

trustManagerkeyManager 在 client/server 之间是互惠的;客户端的信任管理器需要信任服务器的密钥管理器,而服务器的信任管理器需要信任客户端的密钥管理器(如果使用客户端证书)。客户端和服务器之间的唯一区别是服务器必须有一个密钥管理器,而客户端必须有一个信任管理器。如果您没有为客户端指定信任管理器,将使用默认值。

信任管理器基本上是受信任的证书颁发机构(独立于客户端或服务器)。密钥管理器包含身份证书和私钥以证明身份。

因此 client-side 上的 keyManager 用于客户端证书。您需要在 server-side 上配置 trustManager 以信任该证书:包括证书本身,或者更好的是,包括签署客户端证书的证书颁发机构。您通常可以将客户的信任经理保留为默认值。

请注意,客户端只会在服务器请求时发送其证书。所以需要配置服务器为OPTIONALly或者REQUIRE客户端证书:

sslContextBuilder.clientAuth(ClientAuth.REQUIRE);