如何指定客户端的keystore

开启 tlsRequireTrustedClientCertOnConnect后,client如何传递证书?看了代码貌似只有AuthencationTls认证形式支持。

如果使用 Java Client 可以通过以下方式配置

import org.apache.pulsar.client.api.PulsarClient;

PulsarClient client = PulsarClient.builder()
    .serviceUrl("pulsar+ssl://broker.example.com:6651/")
    .enableTls(true)
    .tlsTrustCertsFilePath("/path/to/ca.cert.pem")
    .authentication("org.apache.pulsar.client.impl.auth.AuthenticationTls",
                    "tlsCertFile:/path/to/my-role.cert.pem,tlsKeyFile:/path/to/my-role.key-pk8.pem")
    .build();

官方文档也有 Authentication using TLS | Apache Pulsar

嗯,我的问题是除了AuthencationTls以外其他的就不支持了吗? AuthencationTls是以证书的方式做认证。 如果以token的形式不支持这种双向认证吗?

tls 是建立网络安全通信, authentication 可以设置token , 比如JWT

可能是我没表述清楚, 此处使用AuthenticationTls 才支持双向认证是吧。 我如果使用基于token的Authentication, 该如何开启双向认证

@564940139 你可以试试把

.authentication("org.apache.pulsar.client.impl.auth.AuthenticationTls",
                    "tlsCertFile:/path/to/my-role.cert.pem,tlsKeyFile:/path/to/my-role.key-pk8.pem")

换成

.authentication("org.apache.pulsar.client.impl.auth.AuthenticationToken", "<token>")

相关文档

看了2.10.1的文档并不支持设置客户端设置tlsKeyStoreType和tlsKeyStorePath。


我用的2.8.2,看了下sdk也没类似接口。

可以看下broker的配置 brokerClientAuthenticationPlugin, 这也是启动一个pulsarClient,只有基于tls的authencation才能配置keystore, 基于token形式的authencation不行。

目前已发布的版本暂不支持 mTLS + token 认证,单向 TLS + token 认证是支持的。

正在发布中的 2.11.0 已支持,具体可见 PIP-158: Split client TLS transport encryption from authentication · Issue #15289 · apache/pulsar · GitHub