Я подписываю документ в формате XML и проверяю его на двух разных машинах (подпишите его на одну машину и проверив другую).XML DSIG Verification
Я делаю следующее, чтобы проверить 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: [Мой первый вопрос - это лучший способ превзойти это] ?? Я знаю, что присвоение веб-приложения fulltrust и добавление пользователя к роли администратора не является яркой идеей, хотя оно работает
Мой второй вопрос касается signedXml.CheckSignature(rsaKey);
, возвращающего false. Теперь, согласно моему пониманию, поскольку документ XML подписан цифровой подписью на другой машине, MAC, используемый для его подписания, хранится на этих машинах. Имя контейнера KEY «XML_DSIG_RSA_KEY», но когда я попытался проверить подпись на хост-машине, другой MAC-адрес сгенерированы и сохранены в имени контейнера «XML_DSIG_RSA_KEY» на хост-машине, поэтому цифровая подпись не была проверена.
Q2: Правильно ли это допущение? и что является лучшим способом справиться с этим ... Должен ли я использовать сертификат для цифровой подписи документа XML, а затем проверить его в этом случае. должен ли я сопровождать сертификат XML-документом DSIG. ???