RFC: AWS-LC as TLS Backend for HAProxy#1501
Conversation
af72f5e to
b0c5b6d
Compare
b0c5b6d to
d570aaf
Compare
|
Hi @hoffmaen, thank you for this pr. Is it intentionally in draft status? |
Soha-Albaghdady
left a comment
There was a problem hiding this comment.
LGTM, proposing some minor formatting and restructuring
| HAProxy maintainers explicitly recommend against OpenSSL, citing performance issues and architectural incompatibilities with OpenSSL 3.x's provider dispatch model ([haproxy#3086](https://github.com/haproxy/haproxy/issues/3086)). HAProxy ships optimized code paths for AWS-LC via the `USE_OPENSSL_AWSLC` build flag. | ||
|
|
||
| ## Proposal | ||
|
|
There was a problem hiding this comment.
I would suggest to add 2 lines to describe what we propose "support multiple variants, choose between them using config property" before going into the variants
|
|
||
| ## Summary | ||
|
|
||
| This proposal applies to HAProxy as deployed by haproxy-boshrelease, which Cloud Foundry uses as the HTTPS ingress in front of the Gorouter. It is **not** about the TCP Router shipped with cf-deployment, which is a separate component with a different role. |
There was a problem hiding this comment.
May be add a "Note:" suffix
| - **Tail latency**: Under load, OpenSSL's p95 grows to 23.6ms while AWS-LC stays at 11.2ms. | ||
| - **Scaling costs**: The 43% CPU reduction at typical operating rates eliminates unnecessary horizontal scaling. | ||
|
|
||
| ### Upstream Recommendation |
There was a problem hiding this comment.
-> HAproxy Upstream recommendation
| | `awslc-fips-patched` | AWS-LC FIPS | FIPS with custom HAProxy patches | | ||
| | `multi` | All of the above | Runtime-switchable, for migration | | ||
|
|
||
| ### Single-Variant Releases |
There was a problem hiding this comment.
The section needs to be indented to the right (under release variants)
|
|
||
| These releases are **slim and deploy quickly**: only the necessary dependencies are compiled, and the release tarball contains no unused components. A typical OpenSSL deployment compiles in ~15 minutes; AWS-LC in ~25 minutes (including cmake). | ||
|
|
||
| ### Multi-Variant Release |
|
|
||
| The AWS-LC FIPS module is built from a frozen, certified source tree using a fixed compiler toolchain. To produce a FIPS-compliant binary, AWS-LC's build process runs a `delocate`/`inject_hash` step that rewrites assembly and embeds an integrity hash of the module into the resulting library. This step is implemented in Go, so a Go toolchain (~200MB) must be available at compile time. Go is only a build-time dependency — it is cleaned up after the FIPS library is built and is not part of the runtime. | ||
|
|
||
| FIPS mode can be verified at runtime: |
There was a problem hiding this comment.
Too detailed, can be skipped
| 2. **Phase 2** (optional): operators choose the safety-net route via the multi release, **or** jump directly to the slim single-variant `awslc` release. | ||
| 3. **Phase 3**: switch the default release shipped by haproxy-boshrelease (the no-suffix slim release) from OpenSSL to AWS-LC. The multi release continues to exist for migrations but is not the long-term target — most production deployments end up on a slim single-variant release. | ||
|
|
||
| ## Alternatives Considered |
There was a problem hiding this comment.
I would propose to add this in the problem statement to show what option we considered and why we chose AWS-LC. Proposing accordingly to move the performance comparison table to the proposal section.
Link to the document for quick review: rfc-draft-haproxy-awslc.md
Summary
This PR adds the RFC for AWS-LC as TLS Backend for the haproxy-boshrelease.
AWS-LC is independent of the version provided via the BOSH stemcell and can be kept up to date interdependently. The OpenSSL that is currently used via the stemcell is on an outdated version that has severe performance impacts in high-load scenarios. These would be improved in newer OpenSSL versions, but not resolved. HAProxy explicitely recommends against OpenSSL in production (haproxy/haproxy#3086).
AWS-LC alleviates these issues and is proposed to be added as an optional release. For operators nothing changes, unless they want to opt into using AWS-LC.
AWS-LC is FIPS 140-3 compliant.