Я подписываю XML-документ цифровой подписью и проверяю его на двух разных машинах (подписываю на одной машине и проверяю на другой).
Я делаю следующее, чтобы проверить 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-адрес, используемый для его подписания, хранится на этих машинах. Имя контейнера KEY «XML_DSIG_RSA_KEY», но когда я попытался проверить подпись на хост-компьютере, другой MAC создан и сохранен в имени контейнера "XML_DSIG_RSA_KEY" на хост-компьютере, поэтому цифровая подпись не была проверена.
Вопрос 2. Верно ли это предположение?? и как лучше всего справиться с этим... Должен ли я использовать сертификат для цифровой подписи XML-документа, а затем проверить его в этом случае. должен ли я сопровождать сертификат XML-документом DSIG.???