Key Takeaways
- Scanning tells you what is inside a JAR, not whether it matches the source the project publishes.
- A tampered build under valid coordinates is the gap that neither signatures nor advisory databases close.
- Maven has mature reproducible-build tooling that makes Java well suited to independent rebuild verification.
- SecureChain sits upstream of the Nexus or Artifactory proxy your builds already point at.
Sonatype Repository Firewall (formerly Nexus Firewall) catches plenty before anything reaches your build. It can stop known vulnerabilities, policy violations, and components its intelligence and machine learning systems flag as malicious or suspicious, according to the policies you enforce at the proxy. What none of that establishes is whether the JAR it just inspected was actually built from the source code the project publishes. That gap is why security teams start searching for a Sonatype Nexus Firewall alternative once they run into a tampered artifact under valid coordinates, a problem scanning was never designed to answer.
This guide walks through what binary scanning can and cannot verify, where Sonatype Firewall and JFrog Xray sit on that question, and how SecureChain rebuilds Java packages from source instead, without touching your existing Nexus or Artifactory setup.
What Binary Scanning Can and Cannot Answer
Three separate questions get treated as one in most evaluations, and pulling them apart makes the rest of this comparison straightforward.
| Question | Answered by | Current status in Maven |
|---|---|---|
| Did this artifact arrive intact? | Checksums | Yes, Maven checks these by default |
| Who published this artifact? | PGP signatures | Required at publish, not verified during normal resolution |
| Does this artifact match its source? | Rebuild comparison | Only where someone runs the rebuild |
Maven Central will not accept a release without a PGP signature. Maven does not verify those signatures during normal dependency resolution, though. It checks checksums for transport integrity, and whether a mismatch actually fails the build depends on the repository’s checksumPolicy setting, which defaults to warn rather than fail.
A correctly signed malicious artifact and a correctly signed legitimate one look identical to a default build, since the signature only proves someone with the right key produced it, not that the key belongs to the publisher you expected.
We have covered the mechanics of this gap in more depth in our breakdown of the Jackson lookalike incident, including how Maven’s signature requirement gets satisfied by an attacker who simply controls their own key.
Gradle gives you a more direct control here.
./gradlew --write-verification-metadata sha256,pgp help
That command generates verification metadata, and once you have reviewed it and committed it as a trusted baseline, future builds fail on anything that does not match. The review step matters. Gradle bootstraps optimistically from whatever your repositories are serving at that moment, so the generated file records what you already have rather than proving it was ever trustworthy. Used that way, it is a strong native control.
Signature verification and rebuild verification are not the same control. A compromised publisher account produces a correctly signed JAR containing code its own source repository has never seen. Verifying the signature confirms the artifact came from that account. It says nothing about whether that account’s build matches the source it claims to represent.
The Tampered Artifact Class
An attacker with publish access can build a project, insert a change into the compiled output or build from a modified working tree, and publish normally. Checksums stay consistent, since they only confirm the file that arrived matches the file being served. The signature can stay valid if the attacker controls the signing key tied to that account. The source repository on GitHub stays untouched, because nothing about the published JAR requires a matching commit.
A vulnerability or signature-based scan of that JAR may well come back clean, because no advisory exists for a package nobody has identified as compromised yet. Behavioral analysis is a real second layer and can flag suspicious code on its own, but coverage varies sharply by ecosystem. JFrog documents its automated malicious-package scanners running continuously against npm and PyPI, while listing Maven coverage as well-known malicious packages only. Either way, neither approach establishes whether the published JAR corresponds to the project’s source.
That is a different attack from the Jackson lookalike that hit Maven Central in December 2025, which used namespace impersonation, a package published under a groupId one prefix away from the real library. That kind of thing can be caught by policy, provided you have namespace controls configured, because the coordinates themselves are wrong. Namespace policy cannot identify tampering under otherwise valid coordinates, because neither the coordinates nor a valid signature reveals the source mismatch.
| Attack | Coordinates | What scanning can establish |
|---|---|---|
| Namespace impersonation | Wrong, a lookalike group | Yes, where namespace policy is enforced |
| Known vulnerable dependency | Correct | Yes, through advisory matching |
| Tampered build under valid coordinates | Correct | Sometimes flagged, but never as a source mismatch |
Tampered builds under valid coordinates are what this piece is about. It is not the only attack Java shops need to worry about, but it is the one ordinary binary scanning cannot settle on its own, which is why it needs a control of its own rather than a feature request to an existing tool.
What Sonatype Repository Firewall and JFrog Xray Actually Check
Sonatype Repository Firewall inspects components at the point they enter a repository. Its Release Integrity feature runs machine learning over new releases, flags unusual release behavior, and routes anything suspicious to Sonatype’s research team, with the original Repository Firewall holding flagged components in quarantine until that review clears them. That is a real, useful control, and it is a different operation from confirming an artifact matches its source.
Sonatype sells this in two tiers. The full Repository Firewall integrates with a repository manager, covering both Nexus Repository and supported JFrog Artifactory deployments, and it includes quarantine and namespace confusion protection across a long list of package formats. Firewall Pro is a lighter SaaS proxy service covering npm, Maven, PyPI, and NuGet, and it allows or blocks a component outright rather than holding it in a quarantine state. Neither tier’s own materials describe a rebuild or source comparison step, which is the distinction that matters here.
JFrog Xray indexes artifacts and correlates them against vulnerability and malicious-package intelligence, with its malicious-package system combining automated scanning and researcher validation into a maliciousness score. Separately, JFrog’s Evidence Service can attach signed attestations describing how a build was produced, which is a genuine supply chain provenance capability. It is still trust in a signed claim rather than verification through an independent rebuild. Someone has to sign the attestation, and the attestation is only as trustworthy as whoever produced it.
SecureChain for Java approaches this from the other end. Rather than scanning the publisher’s binary, it screens the source and then compiles its own artifact from that source in a hardened, isolated environment, shipping SLSA Level 3 provenance alongside it. There is no upstream binary to scan, because your build never touches the one either Sonatype or JFrog would have inspected. That is the practical core of Maven repository security right now. Not which vendor’s logo sits on the dashboard, but which question each layer actually answers.
Why Java Is Good Ground for Rebuild From Source
Compiled artifacts sound like a bad target for this kind of verification. Java has spent years building the infrastructure that makes it tractable anyway, through a genuine reproducible builds effort inside the Maven ecosystem.
Setting the project.build.outputTimestamp property gives compatible plugins a fixed timestamp to stamp into generated archives, which removes one of the largest sources of nondeterminism in a JAR.
<properties>
<project.build.outputTimestamp>2026-01-15T00:00:00Z</project.build.outputTimestamp>
</properties>
With that set and a sufficiently controlled build environment, building the same source can produce byte-identical JARs. Starting with Maven 4.0.0-beta-5, reproducible builds mode is on by default with no property required, though Maven 4 has still not reached general availability and 3.9.x remains the maintained release line, so teams still building with Maven 3.x need to set the property explicitly.
mvn artifact:check-buildplan
mvn artifact:compare
The first command tells you which plugins need upgrading before reproducible output works cleanly. The second, maven-artifact-plugin’s compare goal, checks exactly this claim, comparing a local build against a reference build, typically what is published to Maven Central. Apache is careful to point out that a same-environment comparison does not prove third-party reproducibility, because both builds can inherit the same environmental leakage. Real verification means rebuilding somewhere else.
Reproducible Central tracks which Maven Central releases have had independent rebuilds attempted, and coverage is genuinely partial rather than close to universal. A 2024 academic study noted that Reproducible Central reported rebuild attempts for 2,547 releases across 531 projects, set against the 10 million-plus releases and 479,000 unique artifact IDs on Maven Central as of its May 2023 snapshot. Those figures describe that snapshot rather than the registry today, and they show how partial independently verified coverage was at the time.
Go and Rust reduce some of the binary-trust problem because dependencies are commonly distributed as source and protected by ecosystem integrity mechanisms. That is not the same thing as proving a published package corresponds to a particular upstream source revision. Java’s Maven ecosystem has made a comparable investment specifically in reproducible binary output, ahead of where Python wheels with compiled extensions and npm’s publisher-built tarballs generally stand today.
What Rebuild From Source Actually Requires From Upstream
Rebuild comparison produces auditable evidence of whether the build matches its source. Where a project’s build still embeds varying timestamps or other nondeterministic metadata, a byte-for-byte comparison will fail even when the underlying source has not changed at all, no matter who is running it.
For those artifacts, comparison degrades from proof to analysis. The evidence is necessarily weaker and takes more work to interpret, which is worth knowing before you scope a rollout around it. It is still a meaningful signal, but it is not a byte-for-byte match.
Shaded and relocated dependencies make this harder still. Shade plugins rewrite package names and inline dependencies, which changes what a structural comparison is even looking at. It comes up often enough in enterprise Java that it is worth raising directly during an evaluation.
A Sonatype Nexus Firewall Alternative Does Not Mean Replacing Nexus
A repository manager’s proxy repository points at a remote URL. That URL is normally https://repo1.maven.org/maven2/. Pointing it somewhere else is a configuration field, not a migration project.
| Layer | Before | After |
|---|---|---|
| Build tool config | Points at repository manager | Unchanged |
| Repository manager | Proxies Maven Central | Proxies SecureChain |
| pom.xml and settings.xml | Mirror set to repository manager | Unchanged |
| Group repository ordering | As configured | Unchanged |
The developer workflow stays as it is, and project files do not need to change as long as the repository manager remains the build-facing endpoint. Your existing groups, hosted repositories, and cleanup policies stay put. The repository manager keeps doing caching, availability, and policy. The upstream it caches from becomes a screened, rebuilt source instead of the public one.
Do two things alongside the swap. Keep your namespace exclusion rules on the proxy, since blocking your own internal coordinates from resolving upstream is the control that survives configuration drift and has nothing to do with which upstream you are pointed at. Then check your mirror configuration, because Maven honors repositories declared inside a dependency’s own POM, and a transitive dependency can add one to your resolution set without you ever declaring it. A mirrorOf rule set only to central will not intercept those, so confirm yours covers every external repository you intend to route through the repository manager. Our piece on Maven’s settings.xml gap covers this exact failure mode in more depth. Check for it regardless of what you point your proxy at, since it is a pre-existing Maven configuration risk rather than something switching upstreams introduces.
Which Setup Fits
If you are evaluating a Sonatype Nexus Firewall alternative specifically because of a tampered artifact concern, start with that question directly rather than a general feature comparison.
Teams already running Nexus or Artifactory have the easiest path, because this is a proxy URL change and a pilot on one group repository. If your threat model does not include tampered artifacts specifically, existing scanning may already be enough, and namespace exclusion rules plus Gradle verification metadata are free controls that address other common supply chain attack paths.
Regulated environments needing provenance evidence get the most out of rebuild comparison, since it produces auditable evidence, and the reproducibility question per dependency is what to scope out first. And if you are running several ecosystems beyond Java, evaluate this as a stack-level decision rather than a single purchase, since a Java-only control leaves the rest of the stack exactly where it started.
See What SecureChain Rebuilds Before You Decide
If your Nexus or Artifactory setup already handles caching, availability, and policy well, and the open question is whether what is flowing through that pipeline actually matches its source, that is what SecureChain for Java is built for, without touching the repository manager you already run. The same registry keeps delivering vulnerability fixes for your dependencies after upstream maintenance ends, through Endless Lifecycle Support.
Request a quote and we will walk through what a pilot against one group repository would look like on your own dependency tree.
FAQ
What is a Sonatype Nexus Firewall alternative?
Plenty of products compete with Nexus Firewall, now called Sonatype Repository Firewall, on scanning and curation. In this article the term means something narrower, an approach that answers an additional trust question, namely whether a published artifact matches the source it claims to be built from. Screening and rebuild verification are usually run alongside a repository manager rather than instead of one, since the repository manager still handles caching and availability.
Can binary scanning detect a tampered JAR?
Sometimes. A scanner examines what the artifact contains, and behavioral analysis may flag suspicious code inside a tampered JAR without any advisory existing for it. What scanning cannot do on its own is establish that the artifact differs from its claimed source, and that takes a source-to-artifact comparison.
Are reproducible builds possible in Java?
Yes. Maven supports a build output timestamp property that fixes archive metadata, and reproducible builds mode has been enabled by default since Maven 4.0.0-beta-5. With a sufficiently controlled build environment, the same source can produce byte-identical JARs. Coverage across Maven Central is still partial, so reproducibility varies by project.
Does Maven verify PGP signatures by default?
No. Maven Central requires publishers to provide a signature at publish time, but Maven’s normal dependency resolution verifies checksums rather than those signatures. Signature verification requires additional tooling or plugins.
Do I have to replace Nexus or Artifactory to use SecureChain?
No. A repository manager’s proxy points at a configurable remote URL, so switching to SecureChain changes what it proxies rather than removing the repository manager itself. When your existing repository manager remains the build-facing endpoint, developer configuration, project files, and existing groups can stay unchanged.
What happens with artifacts that are not reproducible upstream?
A byte-identical comparison stops being possible once a build produces nondeterministic output, so verification falls back on additional analysis. That evidence is weaker than an exact reproducible match, and it still tells you more than a scan of the binary alone.
