Hi Yunze,

Thanks for your suggestion, your idea is great, but we have the
`tlsProtocols()` and `tlsCiphers()` in `ClientBuilder`, so I use this style.

Thanks,
Zixuan

Yunze Xu <y...@streamnative.io.invalid> 于2022年5月9日周一 13:31写道:

> It totally LGTM. I have a suggestion that it might be better to configure a
> class like `TlsConfiguration` instead of multiple TLS related configs
> added to
> `ClientBuilder`.
>
> Thanks,
> Yunze
>
>
>
>
> > 2022年4月24日 14:15,Zixuan Liu <node...@gmail.com> 写道:
> >
> > Hi Pulsar community,
> >
> > I open a https://github.com/apache/pulsar/issues/15289 for Split client
> TLS
> > transport encryption from authentication.
> >
> > Let me know what you think.
> >
> > Thanks,
> > Zixuan
> >
> > ------
> >
> > Motivation
> >
> > The client supports TLS transport encryption and TLS authentication, this
> > code so like:
> >
> > PulsarClient client = PulsarClient.builder()
> >                .serviceUrl("pulsar+ssl://localhost:6651")
> >                .tlsTrustCertsFilePath("/path/to/cacert.pem")
> >                .authentication(AuthenticationTls.class.getName(),
> authParams)
> >                .build()
> >
> > This causes an issue that cannot use other authentication with TLS
> > transport encryption, and also made our confusion if we use TLS transport
> > encryption by setting authentication.
> > Goal
> >
> > Split client TLS transport encryption from authentication is used to
> > support TLS transport encryption with any authentication.
> > API Changes
> >
> >   - Add new methods in org.apache.pulsar.client.api.ClientBuilder
> >
> > public interface ClientBuilder extends Serializable, Cloneable {
> >    /**     * Set the path to the TLS key file.     *     * @param
> > tlsKeyFilePath     * @return the client builder instance     */
> >    ClientBuilder tlsKeyFilePath(String tlsKeyFilePath);
> >
> >    /**     * Set the path to the TLS certificate file.     *     *
> > @param tlsCertificateFilePath     * @return the client builder
> > instance     */
> >    ClientBuilder tlsCertificateFilePath(String tlsCertificateFilePath);
> > }
> >
> > ImplementationTLS transport encryption
> >
> > We can call the tlsKeyFilePath(), tlsCertificateFilePath() and
> > tlsTrustCertsFilePath() to configurate the TLS transport encryption, the
> > code so like:
> >
> > PulsarClient client = PulsarClient.builder()
> >        .serviceUrl("pulsar+ssl://my-host:6650")
> >        .tlsTrustCertsFilePath("/path/to/cacert.pem")
> >        .tlsKeyFilePath("/path/to/client-key.pem")
> >        .tlsCertificateFilePath("/path/to/client-cert.pem")
> >        .build();
> >
> > TLS transport encryption with any authentication
> >
> > We can call the tlsKeyFilePath(), tlsCertificateFilePath(),
> > tlsTrustCertsFilePath() and authentication() to configurate the TLS
> > transport encryption with any authentication, the code so like:
> >
> > PulsarClient client = PulsarClient.builder()
> >        .serviceUrl("pulsar+ssl://my-host:6650")
> >        .tlsTrustCertsFilePath("/path/to/cacert.pem")
> >        .tlsKeyFilePath("/path/to/client-key.pem")
> >        .tlsCertificateFilePath("/path/to/client-cert.pem")
> >        .authentication(AuthenticationTls.class.getName() /*
> > AuthenticationToken.class.getName()*/, authParams)
> >        .builder()
> >
> > For AuthenticationTls, we need to do check the authParams, when the
> > authParams is empty, we need to read TLS config from ClientBuilder,
> > otherwise read from the authParams
> > Compatibility
> >
> > None.
>
>

Reply via email to