В цифровом подписанном (от .NET 9) XML -документе, как я могу изменить префикс в сгенерированном теге <Gignature> без анC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 В цифровом подписанном (от .NET 9) XML -документе, как я могу изменить префикс в сгенерированном теге <Gignature> без ан

Сообщение Anonymous »

Я использую C# с .net 9, и мне нужно цифровое подписать документ XML, используя сертификат X.509. Сам процесс подписания работает отлично. Тем не менее, мне дали очень конкретное требование: тег
signedXmlWithSchPrefix.SetAttribute("xmlns:sch", customNamespace);

Мне нужно сделать это, чтобы изменить пространство имен на пользовательский. Поскольку я не могу изменить тег после его сгенерирования, единственный способ представить, что это сработает, это если .NET генерирует тег после моих требований. < /P>
Вот моя текущая реализация: < /p>
public static string SignWithCertificate(string xmlFilePath, string certThumbprint)
{
// Busca o certificado
X509Certificate2 cert = GetCertificateFromLocalMachine(certThumbprint);

if (cert == null || !cert.HasPrivateKey)
throw new Exception("Certificado não encontrado.");

// Faz o parse do XML
XmlDocument xmlDoc = new() { PreserveWhitespace = true };
xmlDoc.LoadXml(File.ReadAllText(xmlFilePath));

if (xmlDoc.DocumentElement == null)
throw new ArgumentException("Falta o elemento raíz do documento XML.");

// Define o prefixo e namespace no documento ANTES de assinar
string customPrefix = "sch";
string customNamespace = "http://www.ans.gov.br/padroes/tiss/schemas";
XmlNamespaceManager nsManager = new(xmlDoc.NameTable);
nsManager.AddNamespace(customPrefix, customNamespace);

// Adiciona as referências/transforms
Reference reference = new() { Uri = "" };
reference.AddTransform(new XmlDsigEnvelopedSignatureTransform());

// Prepara a assinatura
SignedXml signedXml = new(xmlDoc) { SigningKey = cert.GetRSAPrivateKey() };
Signature xmlSignature = signedXml.Signature;
xmlSignature.SignedInfo.AddReference(reference);

KeyInfo keyInfo = new();
keyInfo.AddClause(new KeyInfoX509Data(cert));
xmlSignature.KeyInfo = keyInfo;

// Gera a assinatura
signedXml.ComputeSignature();

XmlElement signedXmlWithSchPrefix = signedXml.GetXml();
signedXmlWithSchPrefix.SetAttribute("xmlns:sch", customNamespace); //

Подробнее здесь: https://stackoverflow.com/questions/795 ... efix-in-th
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»