【问题标题】:gRPC sslcontext configgRPC ssl上下文配置
【发布时间】:2021-01-14 11:57:29
【问题描述】:

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

【问题讨论】:

    标签: ssl grpc grpc-java


    【解决方案1】:

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

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

    所以客户端的keyManager 用于客户端证书。您需要在服务器端配置 trustManager 以信任该证书:要么包括证书本身,要么包括签署客户端证书的证书颁发机构。您通常可以将客户的信任管理器保留为默认值。

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

    sslContextBuilder.clientAuth(ClientAuth.REQUIRE);
    

    【讨论】:

    • 这真的很有帮助,你拯救了我的一天。
    • 还有一个问题,假设客户端证书由名为 aaa.com 的 CA 颁发,而服务器证书由另一个名为 bbb.com 的 CA 颁发。客户端的ca文件应该是bbb.com的ca文件吧?
    • 是的,在客户端使用 bbb.com 的 CA。一侧的“钥匙”需要与另一侧的“信任”相匹配。密钥和信任不会在同一台机器上相互交互——服务器不需要信任自己,客户端也不需要。
    猜你喜欢
    • 2018-05-17
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 2016-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多