nodece opened a new issue, #15289:
URL: https://github.com/apache/pulsar/issues/15289

   ## Motivation
   
   The client supports TLS transport encryption and TLS authentication, this 
code so like:
   
   ```java
   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`
   
   ```java
   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);
   }
   ```
   
   ## Implementation
   
   ### TLS transport encryption
   
   We can call the `tlsKeyFilePath()`, `tlsCertificateFilePath()` and 
`tlsTrustCertsFilePath()` to cofig the TLS transport encryption, the code so 
like:
   ```java
   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 cofig the TLS transport 
encryption with any authentication, the code so like:
   
   ```java
   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.
   


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to