я снова xD.
Я нахожусь в процессе подписывания документа xml используя c#. У меня есть мои файлы подписи в папке и моем произведенном xml. Для этого я использую пример страницы Microsoft (это был тот, который последовал мне) Microsoft x509
До сих пор в мой Формуляр я поместил кнопку, чтобы производить удостоверение.
Также я комментирую, что я использую тип подписанный envelope (что является тем, в котором я нуждаюсь).
это конечная часть подписанного документа, который я произвожу (я удалил части кодов для того, чтобы он не был таким длинным):
2gkfbuT34GapApOKNQef3whZs54=
FYO0xaRbTIHw/M6h...
MIIDNjCCAh6gAwIBAgIQNozDOzKInKBAbJ67yETfnjANBgkqhk.....
Видят хорошо, но видя документ подписанного примера, который они вручили мне, мне не хватает информации:
Я помещаю пример:
3JUP4fsboOzM3v...
KfDaAuizrGD6p5i0pwN...
x8uFiN6dlSJHcmDBaSJQB8Eh+SfSRrwdvJITx6F7RlTsiAru8VQ+O6RMgMYH8vVsx9X86mcBSiJUsd+z2bcJHdTkOsgthUG7Ke00wMchASb3gYLXsIWgS0/...
AQAB
MIIHLjCCBhagAwIBAgIKMOyn8gA...
И поскольку видят, мне не хватает ключа RSAKeyValue.
Моя консультация, - согласно этому примеру, который я беру из Microsoft. что является тем, чего мне не хватает добавлять, чтобы производить RSAKeyValue?
Потому что на странице я подумал, как производится RSAKeyValue, но я нуждаюсь в том, чтобы добиться, чтобы я произвелся RSA и X509, нажав единственную кнопку моего приложения. Может быть, будьте небольшим количеством команды, первый тип RSA и после я добавляю удостоверение X509, но иду немного потерянным.
Если требуется что-то из кода, который у меня есть, они предупреждают меня и я это помещаю.
Спасибо
Ok, с помощью Мигель Сарате , большое спасибо из-за нее guГ - в. Я смог доставать тему подписи, я надеюсь, чем в кого-то, кто tambiГ©n estГ© в этой же самой дилемме мог бы подавать его.
Восток программирует, что я делаю, производит документ xml и despuГ©s у меня есть другой botГіn, что - это, чтобы подписывать документ, этой подписи - одна, что я generГ© в персональном компьютере, что я использую ее доказательства.
cГіdigo botГіn:
private void btn_Firmax509_Click(object sender, EventArgs e)
{
// ubicación de mi certificado
string Certificate = "C:/LocalMachine/my/tstCert.cer";
try
{
// Generate a signing key.
RSACryptoServiceProvider Key = new RSACryptoServiceProvider();
SignXmlFile(path, path3, Key, Certificate);
}
catch (CryptographicException i)
{
Console.WriteLine(i.Message);
}
}
В этом объявил ее ubicaciГіn моего удостоверения, я произвожу ключ и он envГ - или 4 переменные в нее funciГіn, что будет подписывать.
path ссылается в dГіnde у меня есть не подписанный первоначальный файл, path3 - маршрут, откуда я буду оставлять файл xml подписано, envГ - в ключ и ее ubicaciГіn удостоверения.
Она funciГіn, что подписывает:
public static void SignXmlFile(string FileName, string SignedFileName, RSA Key, string Certificate)
{
// --------- FIRMADO X509 ----------------
XmlDocument doc = new XmlDocument(); // Create a new XML document.
doc.PreserveWhitespace = false; // formateo el documento para que ignore los espacios
doc.Load(new XmlTextReader(FileName)); // recargo el archivo
SignedXml signedXml = new SignedXml(doc); // creo el objto del documento como firmado?
signedXml.SigningKey = Key; // a este documento firmado le agrego la llave
Reference reference = new Reference(); // creo una referencia para firmar
reference.Uri = "";
XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform(); // Creo En sobre para el XML -> env
reference.AddTransform(env); //a esta referencia le agrego una transformación de tipo envelope
signedXml.AddReference(reference); // y ahora esta referencia se la asigno al documento firmado
KeyInfo keyInfo = new KeyInfo(); // Ahora tengo que crear un objeto para firmar
keyInfo.AddClause(new RSAKeyValue((RSA)Key)); //agrego la firma RSA
X509Certificate MSCert = X509Certificate.CreateFromCertFile(Certificate); // Descargamos el certificado
keyInfo.AddClause(new KeyInfoX509Data(MSCert));
signedXml.KeyInfo = keyInfo;
signedXml.ComputeSignature();
XmlElement xmlDigitalSignatureRSA = signedXml.GetXml(); //elemento con la firma RSA y X509
// Agrego al documento un hijo con las llaves
doc.DocumentElement.AppendChild(doc.ImportNode(xmlDigitalSignatureRSA, true));
if (doc.FirstChild is XmlDeclaration)
{
doc.RemoveChild(doc.FirstChild);
}
//guardo el documento
XmlTextWriter xmltw = new XmlTextWriter(SignedFileName, new UTF8Encoding(false));
doc.WriteTo(xmltw);
xmltw.Close();
}