+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