Я подписываю цифровой документ XML и проверяю его на 2 разных компьютерах (подписываю его на одном компьютере и проверяю на другом).
Я делаю следующее, чтобы проверить XML DSIG в CSharp.Net.
public static Boolean VerifyXml(XmlDocument document)
{
document.PreserveWhitespace = true;
// Create a new CspParameters object to specify
// a key container.
CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = "XML_DSIG_RSA_KEY";
// Create a new RSA signing key and save it in the container.
//**Earlier was getting exception here in rsaKey object**
RSACryptoServiceProvider rsaKey = new RSACryptoServiceProvider(cspParams);
// Create a new SignedXml object and pass it
// the XML document class.
SignedXml signedXml = new SignedXml(document);
// Find the "Signature" node and create a new
// XmlNodeList object.
// It's guaranteed that there's always exists a signature
XmlNodeList nodeList = document.GetElementsByTagName("Signature");
// Load the <signature> node.
signedXml.LoadXml((XmlElement)nodeList[0]);
// Check the signature and return the result.
bool isDone = signedXml.CheckSignature(rsaKey); //**This is returning false.**
return isDone;
}
Изначально я получал исключение PermissionDenied, когда мое веб-приложение пытается получить доступ к контейнеру ключей. Однако я временно добавил пользователя приложения и пользователя IIS в роль администратора и назначил политику безопасности FullTrust своему веб-приложению с помощью CasPol.
Q1: [Мой первый вопрос: Каков наилучший способ преодолеть это?] Я знаю, что назначение полного доверия веб-приложения и добавление пользователя к роли администратора не очень хорошая идея, даже если это работает
Мой второй вопрос касается signedXml.CheckSignature(rsaKey);
возврата false. Теперь, насколько я понимаю, поскольку документ XML имеет цифровую подпись на другом компьютере, MAC-адрес, используемый для его подписи, хранится на этих компьютерах. КЛЮЧЕВОЕ имя контейнера "XML_DSIG_RSA_KEY", но когда я пытался проверить подпись на хост-компьютере, другой MAC генерируется и хранится в имени контейнера «XML_DSIG_RSA_KEY» на хост-компьютере, поэтому цифровая подпись не была проверена.
Q2: Это предположение правильно ?? и как лучше всего справиться с этим ... Должен ли я использовать сертификат для цифровой подписи XML-документа, а затем проверить его, в этом случае. мне нужно приложить сертификат к XML-документу DSIG .???