在GRPC中,如何有选择地要求少数服务需要Client Certificate,而其他服务不需要?

In GRPC, how to selectively require Client Certificate for a few services but not require it for other services?

在TLS相互认证中,我知道ClientAuth(准确的说是io.grpc.netty.shaded.io.netty.handler.ssl.ClientAuth)有三种模式:

  1. None - 服务器不请求任何客户端证书
  2. 可选 - 服务器请求客户端证书,但无论它是否有效,服务器都会允许它通过
  3. 要求 - 客户必须提供有效的证书

但是假设我有两个 grpc 服务定义。对于第一个,我不需要任何身份验证,而对于下一个,我确实想要严格要求身份验证。如何做到这一点?

是否应该将服务器配置为 'Optional' 模式,然后需要拦截器根据客户端访问的服务来验证客户端证书?如果是的话,那么这确实显得比较重,而且出错的风险也更大。

(也许上一段让我听起来像一个懒惰的人,并且将我的安全工作外包给其他人来完成:p,但我只是想找出实现此功能的最佳方法并重新-使用现有的框架而不是重新做)

最初是作为问题提出的here,但到目前为止还没有收到任何回复。

回答我自己的问题:

如评论中所述,@SanP 确实对 github 问题做出了回应,并提出了以下建议:

The best thing to do is to bind these services to different ports so you can configure TLS/mTLS for each of those services as per your logic.

我同意这一点,在他回应之前我也同意了。从多个来源获得确认总是好的。