Подписывать xml с RSA и X509 в c#

я снова 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, но иду немного потерянным.

Если требуется что-то из кода, который у меня есть, они предупреждают меня и я это помещаю.

Спасибо

1
задан 19.03.2019, 17:53
1 ответ

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();
        }
2
ответ дан 02.12.2019, 05:27

Теги

Похожие вопросы