2012-02-06 2 views
2

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

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

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

ответ

2

Чтобы подключить произвольные сертификаты к файлу XML-DSIG, добавьте <X509Data> element. Для того, чтобы сделать это в .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), вам необходимо найти прилагаемый сертификат, который matches the key вернулся с CheckSignatureReturningKey.

+0

Просто спас меня около дня исследования. :) – Spence

+1

@Spence больше как 3-4 дня :) –

Смежные вопросы