如何在 Java 中的 Apache Arrow FlightClient 上启用 TLS?

How do I enable TLS on an Apache Arrow FlightClient in Java?

提问人:c_sagan 提问时间:3/31/2023 最后编辑:c_sagan 更新时间:4/4/2023 访问量:120

问:

Java Apache Arrow () 的文档包含几种与构建启用 TLS 的客户端相关的方法:v11.0.0FlightClient.Builder

  • clientCertificate(InputStream clientCertificate, InputStream clientKey)
  • useTls()
  • overrideHostname(String hostname)
  • trustedCertificates(InputStream stream)
  • verifyServer(boolean verifyServer)

这些描述不够详细,我无法理解在与 .我对 TLS 的理解很容易存在一些差距,这将有助于我更轻松地使用本文档。FlightServer

我需要使用所有这些吗?其中一些是多余的吗?它们有什么关系?

java tls1.2 apache-arrow apache-arrow-flight

评论


答:

1赞 c_sagan 4/4/2023 #1

我看了一下实现此 API 的代码,以获得一些见解。

useTls只需告诉底层客户端构建器开始为启用 TLS 的客户端组合 SSL 上下文。通过将方案附加到 location 属性,可以实现相同的效果。grpc+tls

其余选项用于添加到 SSL 上下文。上下文构建器由 提供。io.netty.handler.ssl.SslContextBuilder

  • clientCertificate(cert, key)将提供的证书/密钥添加到 SSL 上下文的密钥管理器。
  • trustedCertificates(cert)将提供的证书添加到信任管理器(用于第三方连接验证)。
  • verifyServer(bool)如果提供了上述两个中的任何一个,则不能,因为它们是验证服务器所必需的。如果是 ,则只需使用 来设置信任管理器。falsefalseInsecureTrustManagerFactory.INSTANCE
  • overrideHostname(hostname)在通道生成器上调用底层。这与我想做的事情无关。overrideAuthority()

我需要使用所有这些(忽略)吗?这取决于客户端将连接到的服务器上如何配置 TLS。overrideHostname

它们中的任何一个都是多余的吗? 如果属性已附加了 TLS 方案,则为冗余。useTls()location