Thanks for your clarification. Let’s continue maintaining these configs in
`ClientBuilder`.

Thanks,
Yunze




> 2022年5月9日 13:54,Zixuan Liu <node...@gmail.com> 写道:
> 
> 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