Чтобы прикрепить произвольные сертификаты к файлу XML-DSIG, добавьте элемент <X509Data>
. Чтобы сделать это в .NET, используйте:
signedXml.KeyInfo.AddClause(
new KeyInfoX509Data(certificate, X509IncludeOption.WholeChain));
Чтобы извлечь сертификаты из файла XML, используйте:
var certificates = signedXml.KeyInfo.OfType<KeyInfoX509Data>().Single();
Затем вы можете проверить цепочку, используя следующее:
var chain = new X509Chain();
chain.ChainPolicy.ExtraStore.AddRange(
certificates.Cast<X509Certificate2>().ToArray());
var chainIsOk = chain.Build(signingCertificate);
Чтобы выяснить, какой сертификат фактически использовался для подписи (и, следовательно, значение signingCertificate
), вам нужно найти включенный сертификат, который соответствует ключу , возвращенному из CheckSignatureReturningKey
.