Desenvolvimento NFS-e
Desenvolvimento NFS-e
Desenvolvimento NFS-e
Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.
Desenvolvimento NFS-e

Site destinado a desenvolvedores de softwares na integração com a NFS-e.
 
InícioInício  Últimas imagensÚltimas imagens  ProcurarProcurar  RegistarRegistar  Entrar  

 

 Como assinar um xml com VB.Net

Ir para baixo 
AutorMensagem
robertag




Mensagens : 2
Data de inscrição : 18/12/2013

Como assinar um xml com VB.Net Empty
MensagemAssunto: Como assinar um xml com VB.Net   Como assinar um xml com VB.Net EmptyQua Dez 18, 2013 9:11 am

Bom dia,

Utilizo o VB 2005 e Framework 2.0, estou tentando usar a sua função porém na linha Dim signedXml As New Xml.SignedXml(docXML) gera o erro: “Overload resolution failed because no accessible ‘New’ can be called without a narrowing conversion: Public Sub New(elem As System.xml.xmlElement)’: Argument parameter ‘elem’ narrow from ‘Object’ to ‘System.Xml.XmlElement’. Public Sub New(document As system.Xml.XmlDocument’): Argument matching parameter ‘document’ narrows from ‘Object ‘ to ‘System.xml.XmlDocument’
Poderiam me ajudar?


Imports System.Xml
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.Xml
Imports System.IO

Public Function SelecionarCertificado() As String
   Try

     'Representa um certificado X509
     Dim objCertificadoX509 As New X509Certificate2

     'Representa o local onde os certificados X509 são armazenados
     'Seleciona os certificados locais e do usuário atual
     Dim getCertificadosX509 As New X509Store("MY", StoreLocation.CurrentUser)
     getCertificadosX509.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)

     'Representa uma coleção de objetos X509Certificate2
     Dim objColecaoCertificadosX509 As New X509Certificate2Collection

     'Abre a caixa de diálogo com os certificados diponiveis
     objColecaoCertificadosX509 = X509Certificate2UI.SelectFromCollection(getCertificadosX509.Certificates, _
     "Certificado(s) Digital(is) disponível(is)", "Selecione o certificado digital para uso no aplicativo", _
     X509SelectionFlag.SingleSelection)

     'Verifica se existe algum certificado selecionado
     If objColecaoCertificadosX509.Count > 0 Then
       'Mostra o assunto do certficado selecionado
       'lblCertificado.Text = objColecaoCertificadosX509.Item(0).Subject.ToString
       'Adiciona o número do serial na variável
       p_NumeroSerialCertificado = objColecaoCertificadosX509.Item(0).SerialNumber.ToString
     End If
   Catch ex As Exception
     MsgBox(ex.Message)
   End Try

   SelecionarCertificado = p_NumeroSerialCertificado
 End Function

 Private Sub AssinarDocumentoXML(ByVal ArqXMLAssinar As String, ByVal TagXML As String)

   Try

     'Pega o conteúdo XML que será assinado
     Dim srdDocXml As StreamReader
     Dim strXML As String
     Dim strTagXml As String = TagXML

     srdDocXml = File.OpenText(ArqXMLAssinar)
     strXML = srdDocXml.ReadToEnd()
     srdDocXml.Close()

     'Representa uma coleção de objetos X509Certificate2
     Dim objColecaoCertificadosX509 As X509Certificate2Collection = Nothing

     'Instância que representa um certificado X509
     Dim objCertificadoX509 As New X509Certificate2()

     'Representa o local onde os certificados X509 são armazenados e
     'seleciona os certificados locais e do usuário atual
     Dim getCertificadosX509 As New X509Store("MY", StoreLocation.CurrentUser)

     'Abrir em modo de leitura e apenas os certificados existentes
     getCertificadosX509.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)

     'Procure por certificados usando o número serial como parâmetro, o último parâmetro indica para a
     'função retornar somente certificados válidos
     objColecaoCertificadosX509 = getCertificadosX509.Certificates.Find(X509FindType.FindBySerialNumber, p_NumeroSerialCertificado, True)

     'Verifica se existe algum certificado selecionado
     If objColecaoCertificadosX509.Count > 0 Then

       'Selecionar o certificado e armazena na váriavel
       objCertificadoX509 = objColecaoCertificadosX509.Item(0)
       Dim docXML = New XmlDocument() 'Iniciamos um novo documento XML

       docXML.PreserveWhitespace = False 'Não deixar espaços no documento
       docXML.Load(ArqXMLAssinar) 'Carrega o XML

       'Retorna a quantidade de tags de assinatura, deve existir apenas uma.
       If docXML.GetElementsByTagName(strTagXml).Count = 1 Then

         'Classe usada para assinar o documento XML
         Dim signedXml As New Xml.SignedXml(docXML)
         'Configura a chave de assinatura
         signedXml.SigningKey = objCertificadoX509.PrivateKey

         'Representa o elemento de referência da assinatura digital do XML
         Dim Referencia As New Xml.Reference()
         ' Representar a idendificação do elemento de assinatura
         Referencia.Uri = ""

         'Essa classe remove os elementos de assintura <Signature> antes de
         'criar um digest do documento XML.
         Dim env As New XmlDsigEnvelopedSignatureTransform

         'Adicionamos o elemento na referência
         Referencia.AddTransform(env)

         'Representa a canonização C14N XML
         Dim c14 As New XmlDsigC14NTransform

         'Adicionamos o elemento na referência
         Referencia.AddTransform(c14)

         'Adiciona as referências na assinatura
         signedXml.AddReference(Referencia)

         'A Classe KeyInfo representa o elemento <KeyInfo> da assinatura digital
         Dim KeyInfo As New KeyInfo

         'Carrega o certificado usando o objetoKeyInfoX509Data e
         'adiciona ao elemento <KeyInfo>
         KeyInfo.AddClause(New KeyInfoX509Data(objCertificadoX509))

         'Adiciona o objeto KeyInfo na assinatura
         signedXml.KeyInfo = KeyInfo
         'Computa a assinatura digital
         signedXml.ComputeSignature()

         'Cria um novo elemento XML
         Dim xmlDigitalSignature As XmlElement
         'Pega a assinatura digital e adiciona ao elemento
         xmlDigitalSignature = signedXml.GetXml()

         ' Gravar o elemento no final do documento XML
         docXML.DocumentElement.AppendChild(docXML.ImportNode(xmlDigitalSignature, True))

         'Salva o documento XML já assinado
         Dim EscreverXML As New StreamWriter(ArqXMLAssinar)
         EscreverXML.Write(docXML.OuterXml)
         EscreverXML.Close()

       End If

     End If

   Catch ex As Exception

     MsgBox(ex.Message)

   End Try

 End Sub
Ir para o topo Ir para baixo
 
Como assinar um xml com VB.Net
Ir para o topo 
Página 1 de 1
 Tópicos semelhantes
-
» Erro de Assinatura - E302
» Ginfes - Como transformar os objetos em arquivo String XML para assinar?
» Como assinar um xml com o php
» Como assinar Tag de NFe e Tag de lote?
» SAP - Ginfes - Assinar Cancelamento na V2

Permissões neste sub-fórumNão podes responder a tópicos
Desenvolvimento NFS-e  :: Arquivo XML-
Ir para: