fix(security): close #93 — FIPS-compatible RPM packaging spec (SEC-01)#158
Open
NSchatz wants to merge 4 commits into
Open
fix(security): close #93 — FIPS-compatible RPM packaging spec (SEC-01)#158NSchatz wants to merge 4 commits into
NSchatz wants to merge 4 commits into
Conversation
…acros (Innovar-Healthcare#93) - New top-level packaging/ directory for RPM spec. - %global _binary_filedigest_algorithm 8 and _source_filedigest_algorithm 8 declared inline so cpio payload uses SHA-256 digests (FIPS-compatible). - Name=bridgelink, Version=26.3.1, BuildArch=noarch, Requires java-17-openjdk-headless. - /opt/bridgelink layout preserves server/setup/ contents under bridgelink/ archive root. - %changelog records initial FIPS packaging. Refs: SEC-01, Phase 1 Wave 3 (GH Innovar-Healthcare#93).
…tion recipe (Innovar-Healthcare#93) - Docker-based AlmaLinux 9 build recipe (rpmbuild in a clean container). - FIPS digest verification command: rpm -qp --qf "FILEDIGESTALGO=%{FILEDIGESTALGO}\n" must return 8 (SHA-256). - GPG signing-key audit command and pre-merge gate description (no SHA-1 subkey bindings allowed — Assumption A4). - FIPS-mode docker install smoke recipe (fips-mode-setup --enable + dnf install). - Out-of-scope section references SEC-V2-01 (commons-httpclient / WebDAV). Refs: SEC-01, Phase 1 Wave 3 (GH Innovar-Healthcare#93).
The repository root LICENSE file declares Mozilla Public License Version 2.0 (SPDX: MPL-2.0), but the RPM spec's License: field and the copyright header comments in both bridgelink.spec and packaging/README.md incorrectly stated MPL-1.1. Built RPMs would have advertised the wrong license to downstream consumers (rpm -qi bridgelink). For FIPS / regulated-deployment customers this is a publishable-license metadata defect. Correct to MPL-2.0 in all three locations.
Without an explicit %defattr(-,root,root,-) the file ownership and
permissions in the resulting RPM depend on the build environment's
umask and the staged files' attributes — not deterministic across
build hosts. RHEL packaging guidelines recommend always declaring
%defattr even though modern rpmbuild defaults to root-owned.
%doc / %license entries are deferred until a real production tarball
that includes README.md and LICENSE in its payload is available
(currently the %install just copies %{buildroot}/opt/bridgelink).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Closes #93.
Commits a new top-level
packaging/bridgelink.specsetting%global _binary_filedigest_algorithm 8and%global _source_filedigest_algorithm 8so the cpio payload uses SHA-256 file digests. This is required for installation on FIPS-mode RHEL 8/9 and AlmaLinux 9 — the historical MD5 default is rejected by the FIPS kernel withcpio: Digest mismatch.Changes
packaging/bridgelink.spec(new) — RPM spec with SHA-256 file digest macros, Java 17 runtime dependency,/opt/bridgelinklayout, no%posthooks.packaging/README.md(new) — Docker-based build recipe, FIPS digest verification command, GPG signing-key audit command, FIPS-mode install verification recipe.Test plan
Build executed in
almalinux:9Docker container againstpackaging/bridgelink.spec(using a smokebridgelink-26.3.1.tar.gzcontainingserver/setup/contents as a stand-in for the future CI-produced tarball). FILEDIGESTALGO captured from the producedbridgelink-26.3.1-1.el9.noarch.rpm:Per-file digest cross-check (
rpm -qp --dump) confirms the entries are 64-hex-character SHA-256 hashes, not 32-hex MD5 hashes, e.g./opt/bridgelink/conf/mirth.properties 5186 ... 9e62abeee2a93f5178feacadb77786136a69529a20563f23273389690dc316e3 ....GPG signing-key audit (pre-merge gate — Assumption A4). The Innovar Healthcare public signing key is held outside this repo and was not accessible during the work-cycle that produced this PR. Reviewer must run:
Every line MUST show
hash algorithm: SHA-256or stronger. AnySHA-1orMD5line means the key must be regenerated before this PR can merge (RHEL 9 GPG verifier rejects SHA-1 subkey bindings). Recipe is documented inpackaging/README.md.FIPS-mode RPM install verification on AlmaLinux 9 (pre-merge gate — Docker container). Recipe in
packaging/README.md:Expected: no
cpio: Digest mismatcherror. ARequires: java-17-openjdk-headlessrepo-resolution warning in the bare container is acceptable for the digest smoke test.FIPS-mode RPM install verification on RHEL 8 hardware (pre-merge gate — out-of-band). Milestone explicitly accepts this as a one-shot hardware test outside CI.
Second-set-of-eyes review (milestone constraint — all PRs).
Pre-merge gates
packaging/README.md)Out of scope (tracked)
rpmbuildinto.github/workflows/build_bridgelink.yml— follow-up.commons-httpclient-3.0.1.jarruntime removal — SEC-V2-01.Local test verification (2026-05-13)
Ant 1.10.14 + OpenJDK 17.0.18 + Docker.
ant -f server/build.xml compile— BUILD SUCCESSFUL (48s)almalinux:9Docker container — successful:rpm -qp --dump:root rootconfirmed (%defattr(-,root,root,-)fix from WR-07).rpmspec --query --srpm --qf '%{NAME} %{VERSION} %{RELEASE} %{LICENSE}\n' packaging/bridgelink.specreturns:License: MPL-2.0matches rootLICENSEfile content "Mozilla Public License Version 2.0").The three open pre-merge gates (GPG SHA-1 subkey audit, AlmaLinux 9 FIPS install, RHEL 8 hardware FIPS install) remain open as documented above — the digest-macro itself is now validated end-to-end against a real
rpmbuildtoolchain in a containerised FIPS-target distro.