Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  • Tests that they are signed by a key which is in an appropriate keyRing, failing if any signatures are missing or not resolvable.

    • This is used to ensure that you are not imposing a supply chain issue upon your customers.

  • Tests that the version is the one specified in the pom file (because maven’s resolution of dependencies is non intuitive). This fails if versions mismatch, or if artifacts are missing.

    • As a part of this test it can also do a reverse lookup and provide a trace back to which pom-specified artifact caused a particular jar to become a part of the distribution

  • Finally it can check the signature of every jar in your local maven repository. This can be used to check for supply chain attacks via maven plugins.

...

Element Name

Required?

Default

Function

parentPomDir

Yes

This is the absolute path to the directory where the parent pom for the project is stored. This is parsed and used to

  • Establish the groupId for all artifacts (to allow signature lookup)

  • Establish which versions of the different artifacts are expected

dataGroupId 3.0
dataArtifactId 3.0
dataVersion 3.0

Yes

Maven coordinates of the project which contains the keys (and if required) signatures for jars. See below. Supercedes enforcerData

dataKeyRing 3.0

Yes

Absolute path to a keyring with keys which will be used to check the validity of the above specified jar file

tgzFiles 3.0

One must be present

Space separated list of tar.gz files to be scanned. Supercedes jarFiles

zipFiles 3.0

Space separated list of zip files to be scanned. Supercedes jarFiles

checkSignatures

true

Whether to run signature checking on the contents

sigCheckReportPath 3.0

${project.build.directory}\signatureReport.txt

Where to write the report of the signature checking

checkDependencies

true

Whether to run dependency analysis and report if any versions mismatch

listJarSources

false

Whether, as part of the dependency check to do a reverse look up of artifact to source (this is a slow operation)

depCheckReportPath 3.0

${project.build.directory}\dependencyReport.txt

Where to write the report of the signature checking

checkM2

false

Whether all the non-source, non-test jar files in the users maven repository (~/.m2/repository) will be checked

versionExtensions 3.2

-SNAPSHOT -GA -jre -empty-to-avoid-conflict-with-guava

See below

classifiers 3.2

<empty string>

See below

m2ReportPath 3.0

${project.build.directory}\m2SignatureReport.txt

Where to write the report of the m2 checking

Expand
titleAdvanced checkDependencies Configuration

The checkDependencies test will fail for several reasons. In certain circumstances, some strange configurations are required. Whether these start configurations are fatal or not can be controlled by four further Elements. Each element is a boolean (true/false) and defaults to true

  • compileRuntimeArtifactFatal. Setting this to false allows an artifact to be declared as runtime scope in some pom files and as compile scope in others. As an example, the IdP sets this element to false to cope with the logback artifacts (logback-classic and logback-core)

  • multipleJarVersionsFatal. If the sane same artifact (with the same or different versions) is found in multiple places in the supplied distribution the enforcer will fail unless this element is set to false. For example until V4.1.5 the IdP shipped with jcommander in the war\WEB_INF\lib folder and the bin\lib folder.

  • pomVersionMismatchFatal. If the a declaration of the same artifact carries different versions across the pom files then the enforcer will fail unless this element is set to false. For example in the later V4.1 distributions the version of spring (set in the spring-bim file) is overridden in the idp-parent pom.

  • distVersionMismatchFatal. If the artifact is the distribution has a difference version to that specified in the pom files then the enforcer will fail unless this element is set to false. I can think of no reason why this might be anything but a misconfiguration.

The Enforcer Data jar

The jar file referenced by the dataGroupId/dataArtifactId/dataVersion coordinated contains three sets of data used by the enforcer. These are all contained below the net/shibboleth/mvn/enforcer/data/ directory.

...

A file called artifactMap.propertieswhich contains the mapping from artifactid to group. This is used where jar files are encountered which are not explicitly mentioned in the parent pom

...

Anchor
VersionExtensionsClassifiers
VersionExtensionsClassifiers
Decomposing file names, version extensions, classifiers and group lookups

Versions and Classifiers

When the enforcer is traversing the distribution (the tgz or zip file) as part of the signature check, it needs to infer the maven artifact coordinates from the file name. These coordinates allow the enforcer to download the signature (asc file) for the jar.

Thus, given a name such as bcutil-jdk15on-1.70.jar listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar or netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar it needs to be able to infer the groupId, artifactId, version and classifier. Since the enforcer has already read the project pom (and its parents) it can simply do this for artifacts which are explicitly mentioned. However the enforce does not follow dependencies and so it has to infer the coordinates which are in the distribution as a result of a dependency. To do this it treats a jar name as being made up of 4 parts

  1. A non-optional artifactId, followed by

  2. A non-optional version which starts with a '-' followed by

  3. An optional ‘extension garnish' which starts with a '-’ followed by

  4. An optional classifier which starts with a '-'

The maven coordindates are then defined as being

  • The artifactId is (1)

  • The version is (2) concatenated to (3) with the initial hyphen removed.

  • The classifier is (3) with the initial hyphen removed.

Thus in the example above a correct split would be

Jar file name

artifactId

version

classifier

bcutil-jdk15on-1.70.jar

bcutil-jdk15on

1.70

listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar

listenablefuture

9999.0-empty-to-avoid-conflict-with-guava

netty-transport-native-epoll-4.1.75.Final-linux-x86_64.jar

netty-transport-native-epoll

4.1.75.Final

linux-x86_64

Given that all identifiers can contain hyphen tt can easily be seen that, it is impossible to deconstruct the name mechanically and the enforcer requires guidance. This is provided by the <versionExtensions/> and <classifiers/> configuration elements. The text content of these elements is a space separated list of names (with the leading hyphen). So, in order to get the decomposition above you would need the following

Code Block
<versionExtensions>-empty-to-avoid-conflict-with-guava</versionExtensions>
<classifiers>-linux-x86_64</classifiers>

The groupId

There is no mechanical method of determining the groupId from a file name. Instead the enforcer relies on a property file which is distributed in the enforcer data jar at location net/shibboleth/mvn/enforcer/data/artifactMap.properties. Appropriate additions for the above example would include

Code Block
listenablefuture=com.google.guava
netty-transport-native-epoll=io.netty

The bcutil-jdk5on artifactId does not need to be mentioned since it is explicitly defined in the pom files.

See also the troubleshooting section.

The Enforcer Data jar

The jar file referenced by the dataGroupId/dataArtifactId/dataVersion coordinated contains three sets of data used by the enforcer. These are all contained below the net/shibboleth/mvn/enforcer/data/ directory.

  1. A file called artifactMap.propertieswhich contains the mapping from artifactid to group. This is used where jar files are encountered which are not explicitly mentioned in the parent pom (see above).

  2. A directory called localsignatures which contains a series of files whose name is of the form artifactId-version.jar.asc (e.g. antlr-2.7.7.jar.asc) these being signatures on the respective jar files. This is a fallback for when jar files have been publish with no signature. Such signatures should only be added if the jar file has had independend verification

  3. A directory called keyRing which contains a series off keyrings and which is described below.

...

Each keyring contains all the public keys which are trusted to validate the signatures of all artifacts with that groupId. The name of each key ring is the groupId with suffix .gpg. As an interim step in keyring deployment it is possible to supply an .asc file with the name derived soley from the groupId (with no suffix).These keyrings require maintenance: deployment it is possible to supply an .asc file with the name derived soley from the groupId (with no suffix).

These keyrings require maintenance:

  • If an artifact is added to the distribution and it is not signed with a trusted key

  • If the version of an artifact changed and the signature on it is not a trusted key.

In both this cases the artifact will not have been added to our repository without a signature check and so it is an absolute assumption that the public key is available.

Adding a new artifact

  • If an artifact is added implicitly as a dependency then you may need to add the artifactId to the distribution and it is not signed with a trusted key

  • If the version of an artifact changed and the signature on it is not a trusted key.

In both this cases the artifact will not have been added to our repository without a signature check and so it is an absolute assumption that the public key is available.

Adding a new artifact

  • If an artifact is added implicitly as a dependency then you may need to add the artifactId to groupId mapping to the artifactMap.

  • If the artifact is in a previously unknown groupId then you must create an empty GPG keyring with the appropriate name (and empty keyring is an empty file with a .gpg extension

Adding a new public key to a keyring

Note

Only commit a change to the keyring after discussion with the committers group (either by Slack or by email) to ensure that an appropriate process has been followed for accrediting the signatory.

Assuming that the key is help in a file called pubkey.asc and the groupId is the.maven.group the following command will add the key.

...

languagebash

...

  • groupId mapping to the artifactMap.

  • If the artifact is in a previously unknown groupId then you must create an empty GPG keyring with the appropriate name (and empty keyring is an empty file with a .gpg extension

Adding a new public key to a keyring

Note

Only commit a change to the keyring after discussion with the committers group (either by Slack or by email) to ensure that an appropriate process has been followed for accrediting the signatory.

Assuming that the key is help in a file called pubkey.asc and the groupId is the.maven.group the following command will add the key.

Code Block
languagebash
gpg --no-default-keyring --keyring ./the.maven.group.gpg  --import pubkey.asc
rm ./the.maven.group.bak
rm ./the.maven.group.gpg.lock
git add ./the.maven.group.gpg

Shibboleth Deployments

In the Shibboleth projects the enforcer is used in two distinct types of place:

  • Dependency & Signature checking when distributables are created.

  • M2 checking towards the end if the build of every project

Dependency & Signature checking

This is enabled for

  • The -dist part of every plugin

  • The idp-dist project

The enforcer is configured to run during the verify phase and the entirety of the configuration (with the exception of the properties defining versions) is contained within the relevant pom file.

M2 checking

This is usually performed in the last module of every project. For multi module projects this is usually the bom project.

The checking is performed in the verify phase and is enabled via specific profile. This allow (nearly) all the configuration to be contained in the parent pom. M2 checking is enabled for any particular module by creating a file called .check-m2 in the modules root directory. It can then be supressed by the -Dno-check-m2 parameter to command line maven.

Finally the output location for the m2 report can be changed for any project by defining a property maven-dist-enforcer-data.m2ReportPath in that project’s pom containing the fully qualified name that the output file should have.

Example output

Expand
Code Block
Signature Testing started at 2021-09-26T09:46:30.494778300Z

ant                           : 1.10.10        Signature Match in keyring org.apache.ant : KeyId: 0XDDBCC1270A29D081	Username:	jaikiran@apache <jaikiran@apache.org> 
ant-launcher                  : 1.10.10        Signature Match in keyring org.apache.ant : KeyId: 0XDDBCC1270A29D081	Username:	jaikiran@apache <jaikiran@apache.org> 
bcpg-jdk15on                  : 1.68           Signature Match in keyring org.bouncycastle : KeyId: 0XB341DDB020FCB6AB	Username:	The Legion of the Bouncy Castle (Maven Repository Artifact Signer) <bcmavensync@bouncycastle.org> 
commons-compress              : 1.20           Signature Match in keyring org.apache.commons : KeyId: 0XA2115AE15F6B8B72	Username:	Stefan Bodewig <bodewig@bost.de>	Username:	Stefan Bodewig <bodewig@apache.org>	Username:	Stefan Bodewig <stefan@samaflost.de>	Username:	Stefan Bodewig <stefan.bodewig@epost.de>	Username:	Stefan Bodewig <stefan.bodewig@freenet.de> 
idp-installer                 : 4.2.0-SNAPSHOT Generated by build.  Not checked
jcommander                    : 1.81           Signature Match in keyring com.beust : KeyId: 0XAC5EC74981F9CDA6	Username:	Cedric Beust <cedric@beust.com> 
annotations                   : 17.0.0         Signature Match in keyring org.jetbrains : KeyId: 0X379CE192D401AB61	Username:	Bintray (by JFrog) <bintray@bintray.com> 
antlr                         : 2.7.7          Signature Match in keyring antlr : KeyId: 0X378B845402277962	Username:	Scott Cantor <cantor.2@osu.edu> 
bcpkix-jdk15on                : 1.68           Signature Match in keyring org.bouncycastle : KeyId: 0XB341DDB020FCB6AB	Username:	The Legion of the Bouncy Castle (Maven Repository Artifact Signer) <bcmavensync@bouncycastle.org> 
bcprov-jdk15on                : 1.68           Signature Match in keyring org.bouncycastle : KeyId: 0XB341DDB020FCB6AB	Username:	The Legion of the Bouncy Castle (Maven Repository Artifact Signer) <bcmavensync@bouncycastle.org> 
byte-buddy                    : 1.10.21        Signature Match in keyring net.bytebuddy : KeyId: 0X7999BEFBA1039E8B	Username:	Rafael Winterhalter <rafael.wth@gmail.com> 
checker-qual                  : 3.8.0          Signature Match in keyring org.checkerframework : KeyId: 0XB16698A4ADF4D638	Username:	Checker Framework (Official Release) <checker-framework-dev@googlegroups.com> 
classmate                     : 1.5.1          Signature Match in keyring com.fasterxml : KeyId: 0XC9FBAA83A8753994	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi> 
commons-cli                   : 1.4            Signature Match in keyring commons-cli : KeyId: 0X9DAADC1C9FCC82D0	Username:	Benedikt Ritter (CODE SIGNING KEY) <britter@apache.org> 
commons-codec                 : 1.15           Signature Match in keyring commons-codec : KeyId: 0X21939FF0CA2A6567	Username:	Alex Herbert (CODE SIGNING KEY) <aherbert@apache.org> 
commons-compiler              : 3.1.3          Signature Match in keyring org.codehaus.janino : KeyId: 0X58FE9D80369755E0	Username:	Arno Unkrig <aunkrig@codehaus.org> 
commons-dbcp2                 : 2.8.0          Signature Match in keyring org.apache.commons : KeyId: 0X86FDC7E2A11262CB	Username:	Gary David Gregory (Code signing key) <ggregory@apache.org> 
commons-lang                  : 2.6            Signature Match in keyring commons-lang : KeyId: 0X1861C322C56014B2	Username:	Niall Pemberton (Code signing) <niallp@apache.org> 
commons-lang3                 : 3.11           Signature Match in keyring org.apache.commons : KeyId: 0X86FDC7E2A11262CB	Username:	Gary David Gregory (Code signing key) <ggregory@apache.org> 
commons-pool2                 : 2.8.1          Signature Match in keyring org.apache.commons : KeyId: 0X86FDC7E2A11262CB	Username:	Gary David Gregory (Code signing key) <ggregory@apache.org> 
cryptacular                   : 1.2.4          Signature Match in keyring org.cryptacular : KeyId: 0X70B2EBE96C112CC9	Username:	Daniel Fisher <dfisher@vt.edu>	Username:	Daniel Fisher <dfisher@gmail.com> 
dom4j                         : 2.1.3          Signature Match in keyring org.dom4j : KeyId: 0X79E193516BE7998F	Username:	Filip Jirsák <filip@jirsak.org> 
DuoWeb                        : 1.3            Signature Match in keyring com.duosecurity : KeyId: 0X378B845402277962	Username:	Scott Cantor <cantor.2@osu.edu> 
error_prone_annotations       : 2.5.1          Signature Match in keyring com.google.errorprone : KeyId: 0X9A259C7EE636C5ED	Username:	Liam Miller-Cushon <cushon@google.com> 
failureaccess                 : 1.0.1          Signature Match in keyring com.google.guava : KeyId: 0XABE9F3126BB741C1	Username:	Colin Decker <cgdecker@google.com> 
guava                         : 30.1.1-jre     Signature Match in keyring com.google.guava : KeyId: 0XF6D4A1D411E9D1AE	Username:	Christopher Povirk <cpovirk@google.com> 
hibernate-commons-annotations : 5.1.2.Final    Signature not available.  Loaded from local store
hibernate-commons-annotations : 5.1.2.Final    Signature Match in keyring org.hibernate.common : KeyId: 0X01483F262A4B3FF0	Username:	Rod Widdowson <rdw@steadingsoftware.com> 
hibernate-core                : 5.4.29.Final   Signature Match in keyring org.hibernate : KeyId: 0X379CE192D401AB61	Username:	Bintray (by JFrog) <bintray@bintray.com> 
httpclient                    : 4.5.13         Signature Match in keyring org.apache.httpcomponents : KeyId: 0X7C25280EAE63EBE5	Username:	Oleg Kalnichevski <oleg@ural.ru>	Username:	Oleg Kalnichevski <olegk@apache.org> 
httpclient-cache              : 4.5.13         Signature Match in keyring org.apache.httpcomponents : KeyId: 0X7C25280EAE63EBE5	Username:	Oleg Kalnichevski <oleg@ural.ru>	Username:	Oleg Kalnichevski <olegk@apache.org> 
httpcore                      : 4.4.14         Signature Match in keyring org.apache.httpcomponents : KeyId: 0X7C25280EAE63EBE5	Username:	Oleg Kalnichevski <oleg@ural.ru>	Username:	Oleg Kalnichevski <olegk@apache.org> 
idp-admin-api                 : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-admin-impl                : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-api             : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-filter-api      : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-filter-impl     : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-filter-spring   : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-impl            : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-resolver-api    : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-resolver-impl   : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-attribute-resolver-spring : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-authn-api                 : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-authn-impl                : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-cas-api                   : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-cas-impl                  : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-conf-impl                 : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-consent-api               : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-consent-impl              : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-core                      : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-profile-api               : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-profile-impl              : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-profile-spring            : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-saml-api                  : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-saml-impl                 : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-schema                    : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-session-api               : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-session-impl              : 4.2.0-SNAPSHOT Generated by build.  Not checked
idp-ui                        : 4.2.0-SNAPSHOT Generated by build.  Not checked
idwsfconsumer                 : 2.1.0          Signature Match in keyring net.shibboleth.liberty : KeyId: 0X7D27E610B8A3DC52	Username:	Philip David Smart <philip.smart@jisc.ac.uk> 
istack-commons-runtime        : 3.0.11         Signature Match in keyring com.sun.istack : KeyId: 0X7ECBD740FF06AEB5	Username:	Eclipse Implementation of JAXB Project <jaxb-impl-dev@eclipse.org> 
j2objc-annotations            : 1.3            Signature Match in keyring com.google.j2objc : KeyId: 0X29579F18FA8FD93B	Username:	Tom Ball <tball724@gmail.com> 
jackson-annotations           : 2.12.2         Signature Match in keyring com.fasterxml.jackson.core : KeyId: 0X8D7F1BEC1E2ECAE7	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>	Username:	Tatu Saloranta <tatu.saloranta@iki.fi> 
jackson-core                  : 2.12.2         Signature Match in keyring com.fasterxml.jackson.core : KeyId: 0X8D7F1BEC1E2ECAE7	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>	Username:	Tatu Saloranta <tatu.saloranta@iki.fi> 
jackson-databind              : 2.12.2         Signature Match in keyring com.fasterxml.jackson.core : KeyId: 0X8D7F1BEC1E2ECAE7	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>	Username:	Tatu Saloranta <tatu.saloranta@iki.fi> 
jackson-datatype-jsr310       : 2.12.2         Signature Match in keyring com.fasterxml.jackson.datatype : KeyId: 0X8D7F1BEC1E2ECAE7	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi>	Username:	Tatu Saloranta <tatu.saloranta@iki.fi> 
jakarta.activation            : 1.2.2          Signature Match in keyring com.sun.activation : KeyId: 0XD908A43FB7EC07AC	Username:	Eclipse Project for JAF <jaf-dev@eclipse.org> 
jakarta.json                  : 1.1.6          Signature Match in keyring org.glassfish : KeyId: 0X8F303857EBF3ADD5	Username:	Eclipse JSON-P Project <jsonp-dev@eclipse.org> 
jakarta.mail                  : 1.6.6          Signature Match in keyring com.sun.mail : KeyId: 0X0C27E8FAC93B3B19	Username:	Eclipse Project for JavaMail <javamail-dev@eclipse.org> 
jakarta.xml.bind-api          : 2.3.3          Signature Match in keyring jakarta.xml.bind : KeyId: 0X8118B3BCDB1A5000	Username:	Eclipse Project for JAXB <jaxb-dev@eclipse.org> 
jandex                        : 2.2.3.Final    Signature not available.  Loaded from local store
jandex                        : 2.2.3.Final    Signature Match in keyring org.jboss : KeyId: 0X01483F262A4B3FF0	Username:	Rod Widdowson <rdw@steadingsoftware.com> 
janino                        : 3.1.3          Signature Match in keyring org.codehaus.janino : KeyId: 0X58FE9D80369755E0	Username:	Arno Unkrig <aunkrig@codehaus.org> 
java-support                  : 8.2.1          Signature Match in keyring net.shibboleth.utilities : KeyId: 0X7D27E610B8A3DC52	Username:	Philip David Smart <philip.smart@jisc.ac.uk> 
javassist                     : 3.27.0-GA      Signature Match in keyring org.javassist : KeyId: 0X10066A9707090CF9	Username:	Scott Marlow <smarlow@redhat.com> 
javax.persistence-api         : 2.2            Signature Match in keyring javax.persistence : KeyId: 0X0A71E49A4906BF73	Username:	Lukas Jungmann <lukas.jungmann@oracle.com> 
jaxb-runtime                  : 2.3.3          Signature Match in keyring org.glassfish.jaxb : KeyId: 0X7ECBD740FF06AEB5	Username:	Eclipse Implementation of JAXB Project <jaxb-impl-dev@eclipse.org> 
jboss-logging                 : 3.4.1.Final    Signature not available.  Loaded from local store
jboss-logging                 : 3.4.1.Final    Signature Match in keyring org.jboss.logging : KeyId: 0X01483F262A4B3FF0	Username:	Rod Widdowson <rdw@steadingsoftware.com> 
jboss-transaction-api_1.2_spec: 1.1.1.Final    Signature not available.  Loaded from local store
jboss-transaction-api_1.2_spec: 1.1.1.Final    Signature Match in keyring org.jboss.spec.javax.transaction : KeyId: 0X01483F262A4B3FF0	Username:	Rod Widdowson <rdw@steadingsoftware.com> 
joda-time                     : 2.10.10        Signature Match in keyring joda-time : KeyId: 0X72385FF0AF338D52	Username:	Stephen Colebourne (CODE SIGNING KEY) <scolebourne@joda.org> 
jsonapi-converter             : 0.10           Signature Match in keyring com.github.jasminb : KeyId: 0XD83818EAA3228CA1	Username:	Jasmin Begic (jbegic) <jasminbegic@gmail.com> 
jsr305                        : 3.0.2          Signature Match in keyring com.google.code.findbugs : KeyId: 0X59A252FB1199D873	Username:	Tagir Valeev <lany@ngs.ru> 
jul-to-slf4j                  : 1.7.30         Signature Match in keyring org.slf4j : KeyId: 0X2C7B12F2A511E325	Username:	Ceki Gulcu <ceki@qos.ch> 
ldaptive                      : 1.3.0          Signature Match in keyring org.ldaptive : KeyId: 0X70B2EBE96C112CC9	Username:	Daniel Fisher <dfisher@vt.edu>	Username:	Daniel Fisher <dfisher@gmail.com> 
listenablefuture              : 9999.0-empty-to-avoid-conflict-with-guava Signature Match in keyring com.google.guava : KeyId: 0XF6D4A1D411E9D1AE	Username:	Christopher Povirk <cpovirk@google.com> 
log4j-over-slf4j              : 1.7.30         Signature Match in keyring org.slf4j : KeyId: 0X2C7B12F2A511E325	Username:	Ceki Gulcu <ceki@qos.ch> 
logback-classic               : 1.2.3          Signature Match in keyring ch.qos.logback : KeyId: 0X2C7B12F2A511E325	Username:	Ceki Gulcu <ceki@qos.ch> 
logback-core                  : 1.2.3          Signature Match in keyring ch.qos.logback : KeyId: 0X2C7B12F2A511E325	Username:	Ceki Gulcu <ceki@qos.ch> 
metrics-core                  : 4.1.18         Signature Match in keyring io.dropwizard.metrics : KeyId: 0XA388C395AAFB80F8	Username:	Dropwizard <dropwizard.committers@gmail.com> 
metrics-json                  : 4.1.18         Signature Match in keyring io.dropwizard.metrics : KeyId: 0XA388C395AAFB80F8	Username:	Dropwizard <dropwizard.committers@gmail.com> 
metrics-jvm                   : 4.1.18         Signature Match in keyring io.dropwizard.metrics : KeyId: 0XA388C395AAFB80F8	Username:	Dropwizard <dropwizard.committers@gmail.com> 
opensaml-core                 : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-messaging-api        : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-messaging-impl       : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-profile-api          : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-profile-impl         : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-saml-api             : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-saml-impl            : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-security-api         : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-security-impl        : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-soap-api             : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-soap-impl            : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-storage-api          : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-storage-impl         : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-xmlsec-api           : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
opensaml-xmlsec-impl          : 4.2.0-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
slf4j-api                     : 1.7.30         Signature Match in keyring org.slf4j : KeyId: 0X2C7B12F2A511E325	Username:	Ceki Gulcu <ceki@qos.ch> 
spring-aop                    : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-beans                  : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-binding                : 2.5.1.RELEASE  Signature Match in keyring org.springframework.webflow : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-context                : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-core                   : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-expression             : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-extensions             : 6.1.4-SNAPSHOT Snapshot version on a snapshot build.  Not Checked
spring-jcl                    : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-jdbc                   : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-orm                    : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-tx                     : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-web                    : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-webflow                : 2.5.1.RELEASE  Signature Match in keyring org.springframework.webflow : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
spring-webmvc                 : 5.3.9          Signature Match in keyring org.springframework : KeyId: 0X9A2C7A98E457C53D	Username:	Spring Buildmaster <buildmaster@springframework.org> 
stax2-api                     : 3.1.4          Signature Match in keyring org.codehaus.woodstox : KeyId: 0X9CD8549ACF9BD0CE	Username:	Tatu Saloranta (Home mac 2013/7) <tatu.saloranta@iki.fi> 
txw2                          : 2.3.3          Signature Match in keyring org.glassfish.jaxb : KeyId: 0X7ECBD740FF06AEB5	Username:	Eclipse Implementation of JAXB Project <jaxb-impl-dev@eclipse.org> 
unboundid-ldapsdk             : 4.0.14         Signature Match in keyring com.unboundid : KeyId: 0X5657B51F13E59DBE	Username:	UnboundID Corp 
UserAgentUtils                : 1.21           Signature Match in keyring eu.bitwalker : KeyId: 0XAA1450D8AE492038	Username:	Harald Walker <dev@bitwalker.eu> 
velocity-engine-core          : 2.3            Signature Match in keyring org.apache.velocity : KeyId: 0XBEFEEF227A98B809	Username:	Claude Brisson <cbrisson@apache.org> 
woodstox-core                 : 5.0.3          Signature Match in keyring com.fasterxml.woodstox : KeyId: 0XC9FBAA83A8753994	Username:	Tatu Saloranta (cowtowncoder) <tatu.saloranta@iki.fi> 
xmlsec                        : 2.1.6          Signature Match in keyring org.apache.santuario : KeyId: 0X67BF80B10AD53983	Username:	Colm O hEigeartaigh <coheigea@apache.org> 
	All non-exempt jar files correctly signed
Completed at 2021-09-26T09:46:34.519077400Z

...

Expand
titlelistJarSources output
Code Block
Dependency sources for jars found but not explicitly defined as a dependency:

annotations           	: 17.0.0      	Contributed by jsonapi-converter-0.10
antlr                 	: 2.7.7       	Contributed by hibernate-core-5.4.29.Final
byte-buddy            	: 1.10.21     	Contributed by hibernate-core-5.4.29.Final
checker-qual          	: 3.8.0       	Contributed by guava-30.1.1-jre,idwsfconsumer-2.1.0,java-support-8.2.1,opensaml-core-4.2.0-SNAPSHOT,
                                      	opensaml-messaging-api-4.2.0-SNAPSHOT,opensaml-messaging-impl-4.2.0-SNAPSHOT,opensaml-profile-api-4.2.0-SNAPSHOT,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-security-api-4.2.0-SNAPSHOT,opensaml-security-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-storage-api-4.2.0-SNAPSHOT,opensaml-storage-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT,spring-extensions-6.1.4-SNAPSHOT
classmate             	: 1.5.1       	Contributed by hibernate-core-5.4.29.Final
commons-cli           	: 1.4         	Contributed by ldaptive-1.3.0
commons-compiler      	: 3.1.3       	Contributed by janino-3.1.3
commons-lang          	: 2.6         	Contributed by idwsfconsumer-2.1.0
commons-lang3         	: 3.11        	Contributed by opensaml-saml-impl-4.2.0-SNAPSHOT,velocity-engine-core-2.3
commons-pool2         	: 2.8.1       	Contributed by commons-dbcp2-2.8.0
dom4j                 	: 2.1.3       	Contributed by hibernate-core-5.4.29.Final
error_prone_annotations	: 2.5.1       	Contributed by guava-30.1.1-jre,idwsfconsumer-2.1.0,java-support-8.2.1,opensaml-core-4.2.0-SNAPSHOT,
                                      	opensaml-messaging-api-4.2.0-SNAPSHOT,opensaml-messaging-impl-4.2.0-SNAPSHOT,opensaml-profile-api-4.2.0-SNAPSHOT,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-security-api-4.2.0-SNAPSHOT,opensaml-security-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-storage-api-4.2.0-SNAPSHOT,opensaml-storage-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT,spring-extensions-6.1.4-SNAPSHOT
failureaccess         	: 1.0.1       	Contributed by guava-30.1.1-jre,idwsfconsumer-2.1.0,java-support-8.2.1,opensaml-core-4.2.0-SNAPSHOT,
                                      	opensaml-messaging-api-4.2.0-SNAPSHOT,opensaml-messaging-impl-4.2.0-SNAPSHOT,opensaml-profile-api-4.2.0-SNAPSHOT,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-security-api-4.2.0-SNAPSHOT,opensaml-security-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-storage-api-4.2.0-SNAPSHOT,opensaml-storage-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT,spring-extensions-6.1.4-SNAPSHOT
hibernate-commons-annotations	: 5.1.2.Final 	Contributed by hibernate-core-5.4.29.Final
httpclient-cache      	: 4.5.13      	Contributed by spring-extensions-6.1.4-SNAPSHOT
istack-commons-runtime	: 3.0.11      	Contributed by hibernate-core-5.4.29.Final,idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,
                                      	opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-impl-4.2.0-SNAPSHOT
j2objc-annotations    	: 1.3         	Contributed by guava-30.1.1-jre,idwsfconsumer-2.1.0,java-support-8.2.1,opensaml-core-4.2.0-SNAPSHOT,
                                      	opensaml-messaging-api-4.2.0-SNAPSHOT,opensaml-messaging-impl-4.2.0-SNAPSHOT,opensaml-profile-api-4.2.0-SNAPSHOT,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-security-api-4.2.0-SNAPSHOT,opensaml-security-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-storage-api-4.2.0-SNAPSHOT,opensaml-storage-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT,spring-extensions-6.1.4-SNAPSHOT
jakarta.activation    	: 1.2.2       	Contributed by hibernate-core-5.4.29.Final,idwsfconsumer-2.1.0,jakarta.mail-1.6.6,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT
jakarta.xml.bind-api  	: 2.3.3       	Contributed by hibernate-core-5.4.29.Final,idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,
                                      	opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-impl-4.2.0-SNAPSHOT
jandex                	: 2.2.3.Final 	Contributed by hibernate-core-5.4.29.Final
javassist             	: 3.27.0-GA   	Contributed by hibernate-core-5.4.29.Final
javax.persistence-api 	: 2.2         	Contributed by hibernate-core-5.4.29.Final
jaxb-runtime          	: 2.3.3       	Contributed by hibernate-core-5.4.29.Final,idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,
                                      	opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-impl-4.2.0-SNAPSHOT
jboss-logging         	: 3.4.1.Final 	Contributed by hibernate-core-5.4.29.Final
jboss-transaction-api_1.2_spec	: 1.1.1.Final 	Contributed by hibernate-core-5.4.29.Final
jcommander            	: 1.81        	No source artifact found
listenablefuture      	: 9999.0-empty-to-avoid-conflict-with-guava	Contributed by guava-30.1.1-jre,idwsfconsumer-2.1.0,java-support-8.2.1,opensaml-core-4.2.0-SNAPSHOT,
                                      	opensaml-messaging-api-4.2.0-SNAPSHOT,opensaml-messaging-impl-4.2.0-SNAPSHOT,opensaml-profile-api-4.2.0-SNAPSHOT,opensaml-profile-impl-4.2.0-SNAPSHOT,
                                      	opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-security-api-4.2.0-SNAPSHOT,opensaml-security-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-storage-api-4.2.0-SNAPSHOT,opensaml-storage-impl-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT,spring-extensions-6.1.4-SNAPSHOT
spring-aop            	: 5.3.9       	Contributed by spring-context-5.3.9,spring-webflow-2.5.1.RELEASE,spring-webmvc-5.3.9
spring-binding        	: 2.5.1.RELEASE	Contributed by spring-webflow-2.5.1.RELEASE
spring-jcl            	: 5.3.9       	Contributed by spring-beans-5.3.9,spring-context-5.3.9,spring-core-5.3.9,spring-expression-5.3.9,
                                      	spring-orm-5.3.9,spring-web-5.3.9,spring-webflow-2.5.1.RELEASE,spring-webmvc-5.3.9
spring-jdbc           	: 5.3.9       	Contributed by spring-orm-5.3.9
spring-tx             	: 5.3.9       	Contributed by spring-orm-5.3.9
stax2-api             	: 3.1.4       	Contributed by idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT
txw2                  	: 2.3.3       	Contributed by hibernate-core-5.4.29.Final,idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,
                                      	opensaml-saml-impl-4.2.0-SNAPSHOT,opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,
                                      	opensaml-xmlsec-impl-4.2.0-SNAPSHOT
unboundid-ldapsdk     	: 4.0.14      	Contributed by ldaptive-1.3.0
woodstox-core         	: 5.0.3       	Contributed by idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT
xmlsec                	: 2.1.6       	Contributed by idwsfconsumer-2.1.0,opensaml-profile-impl-4.2.0-SNAPSHOT,opensaml-saml-api-4.2.0-SNAPSHOT,opensaml-saml-impl-4.2.0-SNAPSHOT,
                                      	opensaml-soap-api-4.2.0-SNAPSHOT,opensaml-soap-impl-4.2.0-SNAPSHOT,opensaml-xmlsec-api-4.2.0-SNAPSHOT,opensaml-xmlsec-impl-4.2.0-SNAPSHOT

Anchor
troubleshooting
troubleshooting
Troubleshooting

Many of the error messages are (supposed to be) self explanatory and people having issues with them should enter a case in JIRA This will allow me to update the documentation or the error messages.

[TBD] Needs worked examples of

  • wrong versions

  • wrong classifiers

  • missing groupId