Neste artigo veremos como assinar um documento XML, procedimento necessário para diversas operações. A nota fiscal eletrônica de produtos/serviços é um bom exemplo, e que exige a assinatura do documento usando um certificado digital válido instalado na sua máquina, token, smartcards etc…
Os certificados utilizados normalmente são o tipo A1 e A3, sendo que o primeiro é armazenado no computador do solicitante, enquanto que o segundo é guardado em cartões inteligentes (smartcards) ou tokens protegidos por senha.
Vamos ao projeto!
1 – Comece iniciando um novo projeto Windows Forms e nomeando-o como AssinarXML.

2 – Configure o formulário principal da seguinte maneira:

Agora que o formulário está configurado, vamos ao código.
1 – Adicione a seguinte referência em seu projeto System.Security.

2 – Importe os seguintes namespaces

3 – Crie um novo procedimento com o nome AssinarDocumentoXml(), e fique a vontade para escolher o nome que quiser.

4 – Inicie um novo bloco Try…Catch imediatamente antes da instrução End Sub, para pegar as exceções, e dentro desse bloco vamos começar a programar.
5 – Pegamos o conteúdo do XML original usando StreamReader e guardamos o resultado na variável srtXML.

6 – Instanciamos um novo objeto que representa um certificado e selecionados um certificado válido usando o número serial como parâmetro.

7 – Verifique se o certificado foi selecionado.

8 – Carregue o certificado e o documento XML para a memória.

9 – Após verificar se a tag de assinatura existe.

10 – O trecho abaixo é bem interessante, ele define a assinatura do XML.

11 – Adicione as informações do certificado e salve o documento.

Agora que já criamos o procedimento responsável por assinar nosso documento, vamos configurar nosso formulário que foi criado logo acima.
1 – No botão Selecionar XML adicionamos o seguinte código:

2 – Vamos criar agora o procedimento que seleciona o certificado no computador.

3 – Agora é só adicionar os códigos abaixo no evento click dos botões Selecionar Certificado e Assinar o XML.

Nesse exemplo,assinei uma Nota Fiscal Eletrônica de serviço, onde o uso da assinatura digital é obrigatório. Lembrando que para assinar um documento XML você precisa ter o certificado correto.
Download do projeto: http://www.zumodrive.com/share/cNetMWVjZT
Abraço e até a próxima!



