You can see the code in the implementation part, this will be consistent
with the actual document.

Zixuan Liu <node...@gmail.com> 于2022年5月12日周四 17:03写道:

> Hi Michael,
>
> Thanks for your feedback!
>
> >  I notice that the PIP doesn't
> mention documentation. Since we're adding another way to configure
> mTLS, please make sure to document the recommended way that users
> should take advantage of this feature and how this feature relates to the
> existing AuthenticationTLS feature.
>
> Good idea, let me add a simple document that how to use TLS transport and
> TLS authentication.
>
> > We are removing the client's need to use the AuthenticationTLS class
> to perform TLS authentication of clients by the server.
>
> We don't remove the use of the AuthenticationTLS.
>
> > If a user wants to use TLS certificates for authorization, they can
> still put
> roles in their client certificates and continue to use the
> AuthenticationProviderTLS class to map a TLS certificate to a role on
> the server side.
>
> You are right, the users still can use the AuthenticationTLS to perform
> the TLS transport and TLS authentication.
>
> Currently, the AuthenticationTLS includes TLS transport and TLS
> authentication, if the user only uses the TLS transport, not use the TLS
> authentication, it is confusing, so I want to add a TLS transport config in
> `ClientBuilder`.
>
> Thanks,
> Zixuan
>
>
> Michael Marshall <mmarsh...@apache.org> 于2022年5月12日周四 01:51写道:
>
>> I agree that the current state of this feature is a bit confusing, and
>> I think the proposed changes make sense. I notice that the PIP doesn't
>> mention documentation. Since we're adding another way to configure
>> mTLS, please make sure to document the recommended way that users
>> should take advantage of this feature and how this feature relates to the
>> existing AuthenticationTLS feature.
>>
>> In order to make sure I understand the feature correctly, can you
>> confirm that the following is correct?
>>
>> We are removing the client's need to use the AuthenticationTLS class
>> to perform TLS authentication of clients by the server. If a user
>> wants to use TLS certificates for authorization, they can still put
>> roles in their client certificates and continue to use the
>> AuthenticationProviderTLS class to map a TLS certificate to a role on
>> the server side.
>>
>> Thanks,
>> Michael
>>
>>
>>
>>
>>
>>
>> On Mon, May 9, 2022 at 12:58 AM Yunze Xu <y...@streamnative.io.invalid>
>> wrote:
>> >
>> > 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