lhotari commented on PR #26155:
URL: https://github.com/apache/pulsar/pull/26155#issuecomment-4898792450

   I wanted to flag some overlap so we can keep the efforts aligned. PIP-478 
has been in progress and, besides the asynchronous authentication interfaces on 
the client side, it covers the TLS transport aspects of Pulsar 5.0 on both the 
client and the server side. The dependency between the auth and the TLS parts 
is explained in the PIP document (PIP-478: 
https://github.com/apache/pulsar/pull/25890, discussion thread: 
https://lists.apache.org/thread/s9n9jksr9vqgn9o982zmnnkcxdcncy3f).
   
   On the TLS transport side there are more concerns than configuring the JCA 
provider. Stricter security compliance -- for example FIPS 140-3 Level 3 -- 
requires an HSM: the key material is stored in a hardware device and kept 
outside the application, so it never crosses into the Pulsar process. This can 
be achieved with the PulsarTlsFactory plugin interface introduced in PIP-478: a 
plugin implementation can integrate with a security solution that meets such 
requirements (for instance building the TLS context against an HSM via a 
PKCS#11 token, so the private key never leaves the device). For the simpler 
FIPS 140-3 Level 1 case, PIP-478 also lets you configure the JCA provider 
directly (for example a FIPS-validated provider such as BC-FIPS on the JDK TLS 
engine), and it wires the engine/provider selection through every server 
component and the client.
   
   PIP-478 also adds a PulsarHttpClient API. The Pulsar client today uses 
several HTTP clients -- for example authentication plugins such as OAuth2 that 
call a token endpoint -- which currently don't share a centralized 
configuration. The PulsarHttpClient API is added for authentication plugin 
implementations so that the TLS configuration of those HTTP clients can be 
controlled by the PulsarTlsFactory when there are special requirements, or 
handled through the Pulsar v5 client's TlsPolicy configuration when there are 
none. This keeps the TLS transport (and FIPS) configuration consistent across 
the client's outbound TLS, not only the binary protocol and the web/admin 
listeners.
   
   Given that overlap, I'd suggest that PIP-489 builds upon PIP-478 for the TLS 
transport aspects rather than defining a separate TLS transport configuration 
path. That would let PIP-489 concentrate on the broader FIPS-compliance 
concerns that PIP-478 intentionally leaves out of scope -- FIPS-approved 
algorithms in message encryption and authentication, the FIPS 
distribution/packaging, and a fail-fast FIPS-mode validation switch -- while 
reusing the TLS transport foundation.
   
   On the packaging point specifically: I don't think the Gradle migration 
actually lost anything essential there. BC and BC-FIPS can't co-exist on the 
classpath, so switching between them is really a matter of replacing the 
non-FIPS BC jars with the FIPS ones. The old bouncy-castle/bcfips module wasn't 
especially useful for that swap in practice -- a client can simply exclude the 
non-FIPS BC dependencies and add the FIPS ones, and on the server side it can 
be handled by keeping the non-FIPS and FIPS jars in separate directories and 
choosing which one to put on the classpath based on configuration. So the FIPS 
packaging story seems fairly tractable without reintroducing a dedicated 
swappable module.


-- 
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