> Should these changes be released in a minor version?

I think it is reasonable to make this change in 3.1.0. The change will
be covered in the release notes.

> For the Golang client,  I think we should introduce a
> `NewDefaultConfig` method to create the config instead of directly new
> config.

Makes sense, thanks.

- Michael

On Sat, Jun 3, 2023 at 9:37 AM Zixuan Liu <node...@gmail.com> wrote:
>
> +1
>
> Default to enable the TLS hostname verification is important anywhere,
> which protected our application.
>
> Should these changes be released in a minor version?
>
> For the Golang client,  I think we should introduce a
> `NewDefaultConfig` method to create the config instead of directly new
> config.
>
> Thanks,
> Zixuan
>
> Michael Marshall <mmarsh...@apache.org> 于2023年6月3日周六 05:39写道:
> >
> > I put together PRs for the python and the C++ clients:
> >
> > https://github.com/apache/pulsar-client-python/pull/128
> > https://github.com/apache/pulsar-client-cpp/pull/278
> >
> > I am not sure the right way to change the default for the go client
> > because go uses the zero value for structs, and we have the variable
> > named "TLSValidateHostname". Would it perhaps make sense to ignore
> > that variable and instead use "TLSHostnameVerificationDisabled"? Then,
> > false would be the secure default. However, it introduces a double
> > negative, which might make it harder for users to understand.
> >
> > I plan to start the vote next week.
> >
> > Thanks,
> > Michael
> >
> >
> > On Wed, May 31, 2023 at 11:08 PM Michael Marshall <mmarsh...@apache.org> 
> > wrote:
> > >
> > > Hi Pulsar Community,
> > >
> > > I am writing to start the discussion on PIP 273 to enable hostname
> > > verification by default.
> > >
> > > PR with PIP contents: https://github.com/apache/pulsar/pull/20453
> > >
> > > I copy the content below (except for the associated svg of the pulsar
> > > network diagram).
> > >
> > > I look forward to your feedback.
> > >
> > > Thanks,
> > > Michael
> > >
> > > ----
> > >
> > > # PIP 273: Enable hostname verification by default
> > >
> > > # Background knowledge
> > >
> > > When using TLS to secure a network connection from client to server,
> > > hostname verification is the step where the client verifies that the
> > > server's certificate contains the expected Subject Alternative Name or
> > > the Common Name. This step is essential for preventing man in the
> > > middle attacks where a malicious server presents a certificate that is
> > > cryptographically valid but was intended for a different hostname than
> > > the one the client is trying to connect to.
> > >
> > > [RFC 2818](https://datatracker.ietf.org/doc/html/rfc2818#section-3.1)
> > > provides additional details on the hostname verification process as a
> > > part of the TLS handshake and why a client must verify the identity of
> > > the server.
> > >
> > > It is very helpful to understand the network topology of a Pulsar
> > > Cluster when looking to enable hostname verification. Here is a
> > > diagram I created. It is possibly incomplete:
> > >
> > > (see PIP PR to see diagram)
> > >
> > > # Motivation
> > >
> > > The primary motivation is to improve the security of Pulsar by making
> > > it secure by default for hostname verification.
> > >
> > > Pulsar currently disables hostname verification by default, which led
> > > to some security issues in the past. For example,
> > > [CVE-2022-33682](https://github.com/apache/pulsar/wiki/CVE-2022-33682)
> > > happened because there was no way to enable hostname verification
> > > within the broker or the proxy. If hostname verification had been
> > > enabled by default, the lack of configurability would not have been a
> > > security concern but a usability concern.
> > >
> > > # Goals
> > >
> > > ## In Scope
> > >
> > > * Enable hostname verification by default for all clients in the
> > > Pulsar ecosystem.
> > > * Make it possible to configure hostname verification per
> > > geo-replicated cluster.
> > > * Consolidate the name of the hostname verification configuration
> > > option across all server components.
> > >
> > > ## Out of Scope
> > >
> > > * This PIP does not seek to enable TLS by default, which is relevant
> > > because hostname verification only takes affect when TLS is enabled.
> > > * Client configuration names will not be renamed because that would
> > > introduce binary incompatibility.
> > > * Tiered storage clients
> > > * ETCd client configuration -- it enables hostname verification by
> > > default already
> > > * Zookeeper client configuration -- it enables hostname verification
> > > by default already
> > > * Function worker's gRPC client to function instances -- TLS is not
> > > configurable for this connection
> > > * Function state storage to bookkeeper -- TLS is not configurable for
> > > this connection
> > > * Pulsar SQL worker's hostname verification configuration name, which
> > > is `pulsar.tls-hostname-verification-enable`
> > >
> > > # High Level Design
> > >
> > > * Enable hostname verification by default for all (official) clients
> > > in the Pulsar ecosystem.
> > > * Enable hostname verification by default for all server components in
> > > the Pulsar ecosystem.
> > > * Make it possible to configure hostname verification per
> > > geo-replicated cluster.
> > > * Consolidate names by using `tlsHostnameVerificationEnabled` for all
> > > server components.
> > >
> > > # Detailed Design
> > >
> > > ## Design & Implementation Details
> > >
> > > ### Impacted configurations
> > >
> > > * The official Pulsar clients will be impacted.
> > > * The broker's internal pulsar admin client, pulsar client, and
> > > replication clients
> > > * The broker's bookkeeper client and dlog bookkeeper client
> > > * Autorecovery's bookkeeper client
> > > * Bookkeeper's bookkeeper client
> > > * Proxy's pulsar client and pulsar admin client (used for brokers and
> > > function workers)
> > > * WebSocket Proxy's pulsar client
> > > * Function Worker's dlog bookkeeper client, pulsar client (used for
> > > broker), and pulsar admin client (used for broker and for other
> > > function workers)
> > > * Function instance pulsar client and pulsar admin client (including
> > > the function worker client used to download the function)
> > >
> > > ## Public-facing Changes
> > >
> > > All changes in this PIP are public facing.
> > >
> > > ### Public API
> > >
> > > ### Binary protocol
> > >
> > > N/A
> > >
> > > ### Configuration
> > >
> > > There are two name changes. For function worker config, I propose we
> > > replace `tlsEnableHostnameVerification` with
> > > `tlsHostnameVerificationEnabled` to match the other server components.
> > > For the client.conf config which is used by CLI tools, I propose we
> > > change `tlsEnableHostnameVerification` to
> > > `tlsHostnameVerificationEnabled`.
> > >
> > > ### CLI
> > >
> > > ### Metrics
> > >
> > > N/A
> > >
> > > # Monitoring
> > >
> > > N/A
> > >
> > > # Security Considerations
> > >
> > > This PIP will improve Pulsar's security by making it secure by default
> > > for hostname verification.
> > >
> > > # Backward & Forward Compatibility
> > >
> > > ## Revert
> > >
> > > Users and operators can opt out of these changes by setting the
> > > following configurations to `false`:
> > >
> > > | Component | Configuration |
> > > |----------------------------------|----------------------------------------------------------------------------------|
> > > | Pulsar Client | `tlsHostnameVerificationEnabled=false` or
> > > `enableTlsHostnameVerification(false)` |
> > > | Pulsar Admin Client | `tlsHostnameVerificationEnabled=false` or
> > > `enableTlsHostnameVerification(false)` |
> > > | Broker | `tlsHostnameVerificationEnabled=false` |
> > > | Broker's BK Client | `bookkeeper_tlsHostnameVerificationEnabled=false` |
> > > | Bookkeeper | `tlsHostnameVerificationEnabled=false` |
> > > | Autorecovery | `tlsHostnameVerificationEnabled=false` |
> > > | Proxy | `tlsHostnameVerificationEnabled=false` |
> > > | WebSocket Proxy | `tlsHostnameVerificationEnabled=false` |
> > > | Function Worker | `tlsHostnameVerificationEnabled: false` |
> > > | Function Worker's BK/DLog Client |
> > > `bookkeeper_tlsHostnameVerificationEnabled=false` |
> > > | Function Instance | TODO |
> > >
> > > ## Upgrade
> > >
> > > Ensure your certificates will correctly pass hostname verification.
> > >
> > > # Alternatives
> > >
> > > The primary alternative is to make no changes.
> > >
> > > # General Notes
> > >
> > > Here are the current draft PRs for implementing this PIP:
> > >
> > > * https://github.com/apache/pulsar/pull/20268
> > > * https://github.com/apache/pulsar/pull/20269

Reply via email to