Skip to content

[Proposal] FIPS-Capable default distribution: Shipping BCFIPS in the Default OpenSearch Distribution #77

@cwperks

Description

@cwperks

1. Context

OpenSearch currently ships Bouncy Castle FIPS (BCFIPS) jars only in the FIPS distribution (built with -Pcrypto.standard=FIPS-140-3). The default distribution does not include these jars. Because plugins inherit jars from lib/, this creates complexity for any plugin aiming to support FIPS:

  • Plugins like Security must maintain separate builds to manage whether BCFIPS jars must be excluded or bundled.
  • When both core and a plugin supply BCFIPS jars, installation fails due to jar-hell.

2. Decision

We will make the default OpenSearch distribution FIPS-capable by shipping BCFIPS jars in lib/ and exposing them via api scope.

To support this:

  • Plugins will be expected to treat BCFIPS as a provided dependency rather than bundling their own.

3. Rationale

Benefits

  • First-party and third-party plugins no longer need custom FIPS builds.
  • The default distro provides the same providers and algorithms used in the FIPS build.
  • Plugins stop bundling their own BC/BCFIPS jars.

Considerations

  • Community plugins using BC/BCFIPS may need minor adaptation.

  • Default distro will include additional crypto jars.

    • FIPS behavior remains opt-in; provider ordering remains unchanged unless FIPS mode is explicitly enabled.

4. Alternatives Considered

A. Maintain FIPS-only distribution for BCFIPS (status quo)

  • Pros: No change for community plugin authors;
  • Cons: Continues requiring dual builds for first-party plugins;

B. Broader jar-hell relaxation without shipping BCFIPS by default

For this alternative:

  • Plugin install logic will be updated to ignore jar-hell only when the conflicting jar is identical (matching GAV + checksum).

  • Pros: Helps with conflict handling.

  • Cons: Does not address the core problem: plugins still lack a consistent FIPS-capable baseline.


5. Outcome

  • The default distribution becomes FIPS-capable, simplifying plugin development and unifying the runtime crypto environment.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions