Да, вполне возможно.
Если вы экспортируете сертификат, который будете использовать для подписи данных, в файл .pfx, вы можете получить digsig таким образом.
using System;
using System.Xml;
using System.Reflection;
using System.Security.Cryptography;
using System.Security.Cryptography.Xml;
using System.Security.Cryptography.X509Certificates;
// ...
static void SignWithPfxPrivateKey()
{
X509Certificate2 certificate = new X509Certificate2(certFile, pfxPassword);
RSACryptoServiceProvider rsaCsp = (RSACryptoServiceProvider) certificate.PrivateKey;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.PreserveWhitespace = true;
if (loadFromString)
xmlDoc.LoadXml(rawXml); // load from a string
else
xmlDoc.Load("test.xml"); // load from a document
// Sign the XML document.
SignXml(xmlDoc, rsaCsp);
// Save the document.
xmlDoc.Save("RsaSigningWithCert.xml");
xmlDoc.Save(new XTWFND(Console.Out));
}
public static void SignXml(XmlDocument Doc, RSA Key)
{
// Check arguments.
if (Doc == null)
throw new ArgumentException("Doc");
if (Key == null)
throw new ArgumentException("Key");
// Create a SignedXml object.
SignedXml signedXml = new SignedXml(Doc);
// Add the key to the SignedXml document.
signedXml.SigningKey = Key;
// Create a reference to be signed.
Reference reference = new Reference();
reference.Uri = "";
// Add an enveloped transformation to the reference.
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
reference.AddTransform(env);
// Add the reference to the SignedXml object.
signedXml.AddReference(reference);
// Compute the signature.
signedXml.ComputeSignature();
// Get the XML representation of the signature and save
// it to an XmlElement object.
XmlElement xmlDigitalSignature = signedXml.GetXml();
// Append the element to the XML document.
Doc.DocumentElement.AppendChild(Doc.ImportNode(xmlDigitalSignature, true));
}
Чтобы использовать это, вам нужно будет загрузить файл .pfx на размещенный сервер. Вам также потребуется пароль для этого pfx-файла, который вы должны сохранить. безопасно в настройках конфигурации приложения. Вы можете сделать что-то подобное с файлом .cer.
Вы также можете загрузить ключ RSA из обычного XML. Если у вас есть RSACryptoServiceProvider, экземпляр которого вы создали, загрузив ключ из вашего локального хранилища компьютеров, например так:
// Get the key pair from the key store.
CspParameters parms = new CspParameters(1);
parms.Flags = CspProviderFlags.UseMachineKeyStore;
parms.KeyContainerName = "SnapConfig";
parms.KeyNumber = 2;
RsaCsp = new RSACryptoServiceProvider(parms);
... затем вы можете экспортировать этот ключ с помощью
RsaCsp.ToXmlString(true);
Результатом является строка, содержащая XML-документ, который можно сохранить в файл, а затем загрузить на размещенный сервер. Альтернатива файлу .pfx в качестве хранилища для вашей пары ключей. Будьте осторожны. Этот XML-документ не защищен паролем и небезопасен. (прочитайте документ по ToXmlString()) Вы можете зашифровать этот XML-документ так же, как и любые другие настройки. (поиск)
В этом случае вы можете сделать это, чтобы получить свой csp:
RSACryptoServiceProvider csp = new RSACryptoServiceProvider();
csp.FromXmlString(keyPairXml);
person
Cheeso
schedule
29.07.2009