Pergunta

Eu tenho um documento XML com estrutura semelhante à seguinte

<envelop>
    <header>blaa</header>
    <message>blaa blaa</message>
    <footer></footer>
</envelop>

Eu quero assinar digitalmente os elementos de cabeçalho e de mensagens e adicionar a assinatura ao elemento rodapé.

Como posso assinar os elementos e depois verificar a assinatura (usando .net c #)?

Foi útil?

Solução

Você deve ser capaz de adicionar um XPath-Transform para a assinatura. Deve ser algo como isto:

       <Transform Algorithm="http://www.w3.org/TR/1999/REC-xpath-19991116">
         <XPath xmlns:dsig="&dsig;">
         ...
         </XPath>
       </Transform>

Eu não sou fluente em XPath, mas deve ser fácil de formular um XPath-expressão que exclui o rodapé-elemento. (Mas note que XPath é uma parte opcional do XML-DSIG, nem todas as implementações podem apoiá-lo).

Como alternativa, se você pudesse reestruturar seu documento para ser

<envelop>
  <header>blaa</header>
  <message>blaa blaa</message>
  <Signature></Signature>
</envelop>

ou

<envelop>
  <signedEnvelope>
    <header>blaa</header>
    <message>blaa blaa</message>
  </signedEnvelope>
  <Signature></Signature>
</envelop>

você poderia lidar com isso usando uma assinatura Enveloped Transform (primeiro caso) ou assinando o elemento signedEnvelope (segundo caso).

Outras dicas

Há um parceiro Microsoft que poderia ser muito bom para isso. Eles permitem que você adicione assinaturas digitais para XML (assim como todas as outras plataformas). Eu recomendo verificar seu produto, ele é chamado cosign.

Por que não seguir recomendação w3 para XML assinar http://www.w3.org/ 2000/09 / xmldsig # tem uma estrutura básica:

<Signature>
   <SignedInfo>
      <SignatureMethod />
      <CanonicalizationMethod />
      <Reference>
         <Transforms>
         <DigestMethod>
         <DigestValue>
      </Reference>
      <Reference /> etc.
   </SignedInfo>
   <SignatureValue />
   <KeyInfo />
   <Object />
</Signature>

Se você quiser recursos mais avançados, leia sobre XAdES - Eu acho que é avalible em c #

.

Eu vejo este post é antigo, mas talvez alguém tem a mesma necessidade agora. O que você precisa é de alguma forma como uma assinatura envolto em XMLDSIG. A diferença é que, em XMLDSIG você tem que incluir os dados de assinatura em um Assinatura nó.

Se você quiser fazer isso, você tem que implementá-lo seu próprio.

Eu estou envolvido em um projeto para desenvolver uma biblioteca para fornecer XAdES suporte para o .NET Framework.

Já a versão 1.0, que fornece suporte cedo para XAdES-BES acaba de ser lançado.

Você pode encontrá-lo em XAdES .NET Projeto

Espero que o código-fonte pode ajudá-lo de alguma forma.

Cumprimentos.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top