mirror of
https://github.com/nsacyber/HIRS.git
synced 2025-02-21 10:01:49 +00:00
Add cert path validation to SupplyChainValidationServiceImpl class. Errors of this nature will be reported to the ACA under firmware.
This commit is contained in:
parent
8abffb54e2
commit
68c6447760
@ -38,6 +38,7 @@ import hirs.utils.ReferenceManifestValidator;
|
|||||||
import hirs.validation.CredentialValidator;
|
import hirs.validation.CredentialValidator;
|
||||||
import hirs.validation.SupplyChainCredentialValidator;
|
import hirs.validation.SupplyChainCredentialValidator;
|
||||||
import org.apache.logging.log4j.Level;
|
import org.apache.logging.log4j.Level;
|
||||||
|
import hirs.validation.SupplyChainValidatorException;
|
||||||
import org.apache.logging.log4j.LogManager;
|
import org.apache.logging.log4j.LogManager;
|
||||||
import org.apache.logging.log4j.Logger;
|
import org.apache.logging.log4j.Logger;
|
||||||
import org.bouncycastle.util.encoders.Hex;
|
import org.bouncycastle.util.encoders.Hex;
|
||||||
@ -51,7 +52,9 @@ import java.security.KeyStore;
|
|||||||
import java.security.KeyStoreException;
|
import java.security.KeyStoreException;
|
||||||
import java.security.NoSuchAlgorithmException;
|
import java.security.NoSuchAlgorithmException;
|
||||||
import java.security.cert.CertificateException;
|
import java.security.cert.CertificateException;
|
||||||
|
import java.security.cert.X509Certificate;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
@ -415,6 +418,34 @@ public class SupplyChainValidationServiceImpl implements SupplyChainValidationSe
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//Validate signing cert
|
||||||
|
Set<CertificateAuthorityCredential> allCerts =
|
||||||
|
CertificateAuthorityCredential.select(certificateManager).getCertificates();
|
||||||
|
CertificateAuthorityCredential signingCert = null;
|
||||||
|
for (CertificateAuthorityCredential cert : allCerts) {
|
||||||
|
if (Arrays.equals(cert.getEncodedPublicKey(),
|
||||||
|
referenceManifestValidator.getPublicKey().getEncoded())) {
|
||||||
|
signingCert = cert;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
KeyStore keyStore = getCaChain(signingCert);
|
||||||
|
try {
|
||||||
|
X509Certificate x509Cert = CertificateAuthorityCredential.select(certificateManager)
|
||||||
|
.bySubjectKeyIdentifier(signingCert.getSubjectKeyIdentifier())
|
||||||
|
.getX509Certificate();
|
||||||
|
if (!SupplyChainCredentialValidator.verifyCertificate(x509Cert, keyStore)) {
|
||||||
|
passed = false;
|
||||||
|
fwStatus = new AppraisalStatus(FAIL,
|
||||||
|
"Firmware validation failed: invalid certificate path.");
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
LOGGER.error("Error getting X509 cert from manager: " + e.getMessage());
|
||||||
|
} catch (SupplyChainValidatorException e) {
|
||||||
|
LOGGER.error("Error validating cert against keystore: " + e.getMessage());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!referenceManifestValidator.isSignatureValid()) {
|
if (!referenceManifestValidator.isSignatureValid()) {
|
||||||
passed = false;
|
passed = false;
|
||||||
fwStatus = new AppraisalStatus(FAIL,
|
fwStatus = new AppraisalStatus(FAIL,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user