Я получаю x509certificate2 из подписанного документа XML. И тогда мне нужно проверить путь к сертификату, но для этого мне нужно 3 сертификата: root, CA, end. Как это сделать? Сертификат с карты электронного удостоверения личности (это от правительства Армении, так что это надежный якорь). Статус отзыва хороший, но не может построить путь к сертификату. Я написал так, но не знаю, правильно это или нет, потому что он выдает исключение на
var pkixResult = certPathValidator.Validate(certPath, paramsPkix);
$exception {Якорь доверия для пути сертификации не найден.} Org.BouncyCastle.Pkix.PkixCertPathValidatorException
public static PkixCertPathValidatorResult Validate_Pkix(SignatureDocument signatureDocument)
{
var signingCertificate = signatureDocument.XadesSignature.GetSigningCertificate();
X509Chain chain = new X509Chain();
chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain;
chain.ChainPolicy.RevocationMode = X509RevocationMode.Online;
chain.ChainPolicy.VerificationFlags = X509VerificationFlags.NoFlag;
chain.Build(signingCertificate);
var sigCert = signingCertificate.ToBouncyX509Certificate();
var issuer = chain.ChainElements[0].Certificate;
var client = chain.ChainElements[1].Certificate;
var final = chain.ChainElements[2].Certificate;
//-----------------
Org.BouncyCastle.X509.X509Certificate clientCert = client.ToBouncyX509Certificate();
Org.BouncyCastle.X509.X509Certificate issuerCert = issuer.ToBouncyX509Certificate();
Org.BouncyCastle.X509.X509Certificate finalCert = chain.ChainElements[2].Certificate.ToBouncyX509Certificate();
var x509Certs = new List<Org.BouncyCastle.X509.X509Certificate>();
x509Certs.Add(sigCert);
x509Certs.Add(clientCert);
x509Certs.Add(finalCert);
IX509Store x509CertStore = X509StoreFactory.Create("Certificate/Collection", new X509CollectionStoreParameters(x509Certs));
var certPath = new PkixCertPath(x509Certs);
ISet trust = new HashSet { new TrustAnchor(x509Certs[0], null) };
var certPathValidator = new PkixCertPathValidator();
var paramsPkix = new PkixParameters(trust);
paramsPkix.AddStore(x509CertStore);
paramsPkix.IsRevocationEnabled = false;
var pkixResult = certPathValidator.Validate(certPath, paramsPkix);
return pkixResult;
}