Проверить цепочку XMLDSIG в .NET? - PullRequest
2 голосов
/ 06 февраля 2012

Я использую XMLDSIG, чтобы подписать файл конфигурации .Я бы хотел, чтобы мой ЦС мог выдавать ключи, которые можно использовать для подписи XML.Затем я хотел бы убедиться, что XML подписан с помощью ключа, выданного моим ЦС.

Как получить сертификат подписи из объекта SignedXml?Как мне следовать цепочке сертификатов назад к конкретному ЦС?

Обратите внимание, что открытый ключ для моего ЦС будет храниться в моем исполняемом файле, а не в хранилище сертификатов.

1 Ответ

2 голосов
/ 09 февраля 2012

Чтобы прикрепить произвольные сертификаты к файлу 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.

...