ASSINAR XML NFE VB6 USANDO CAPICOM
Ola a Todos.
Alguem Conseguiu Assinar a Digest Value da NFE XML usando a dll Capicom.
Estou utilizando o seguinte codigo, porem esta me retornando resultado muito extenso.
Dim sd As New SignedData
Dim signer As New CAPICOM.signer
Dim Stor As New Store
Dim Cert As Certificate
Dim Certs As New Certificates
Dim CForNext As Integer
Stor.Open
Certs.Clear
For CForNext = 1 To Stor.Certificates.Count
Certs.Add Stor.Certificates.Item(CForNext)
Next CForNext
[ô]Escolher o certificado (aqui deixo a opção de escolher o certificado
[ô]Apenas como exemplo. O certificado poderia ser selecionado, sem a caixa de seleção
[ô]de certificados (repositório do windows) informando diretamente o Ãndice do certificado
[ô]como 0 ou 1...
Set Certs = Certs.Select([Ô]TLMKT[Ô], [Ô]Selecione o Certificado Digital.[Ô], False)
For Each Cert In Certs
MsgBox ([Ô]Nome do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME))
MsgBox ([Ô]e-Mail do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME))
MsgBox ([Ô]Dados do Certificado (que fica no UniNFeConfig.XML:[Ô] & Cert.IssuerName)
MsgBox ([Ô]Data de criação do certificado:[Ô] & _
Cert.ValidFromDate)
MsgBox ([Ô]Certificado válido até:[Ô] & Cert.ValidToDate)
Chave = Cert.PrivateKey
Vx509 = Cert.Export(CAPICOM_ENCODE_BASE64) [ô]public key preenche tag x509certificate
Next
signer.Certificate = Cert
sd.Content = Digest aqui estou passando o resulta do hash sha1 na nfe codificado em base 64
Assinatura = sd.Sign(signer, False, CAPICOM_ENCODE_BASE64) aqui é o momento em que assina pedindo a senha da certificadora A3 em um popup;
esse resultado me retonar super extenso um livro do harrypotter, alguem passou ou esta com esse problema poderia me ajudar.
orbigado.
Set sd = Nothing
Set signer = Nothing
Call PreencheLayoutAssinatura
End Sub
Alguem Conseguiu Assinar a Digest Value da NFE XML usando a dll Capicom.
Estou utilizando o seguinte codigo, porem esta me retornando resultado muito extenso.
Dim sd As New SignedData
Dim signer As New CAPICOM.signer
Dim Stor As New Store
Dim Cert As Certificate
Dim Certs As New Certificates
Dim CForNext As Integer
Stor.Open
Certs.Clear
For CForNext = 1 To Stor.Certificates.Count
Certs.Add Stor.Certificates.Item(CForNext)
Next CForNext
[ô]Escolher o certificado (aqui deixo a opção de escolher o certificado
[ô]Apenas como exemplo. O certificado poderia ser selecionado, sem a caixa de seleção
[ô]de certificados (repositório do windows) informando diretamente o Ãndice do certificado
[ô]como 0 ou 1...
Set Certs = Certs.Select([Ô]TLMKT[Ô], [Ô]Selecione o Certificado Digital.[Ô], False)
For Each Cert In Certs
MsgBox ([Ô]Nome do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME))
MsgBox ([Ô]e-Mail do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME))
MsgBox ([Ô]Dados do Certificado (que fica no UniNFeConfig.XML:[Ô] & Cert.IssuerName)
MsgBox ([Ô]Data de criação do certificado:[Ô] & _
Cert.ValidFromDate)
MsgBox ([Ô]Certificado válido até:[Ô] & Cert.ValidToDate)
Chave = Cert.PrivateKey
Vx509 = Cert.Export(CAPICOM_ENCODE_BASE64) [ô]public key preenche tag x509certificate
Next
signer.Certificate = Cert
sd.Content = Digest aqui estou passando o resulta do hash sha1 na nfe codificado em base 64
Assinatura = sd.Sign(signer, False, CAPICOM_ENCODE_BASE64) aqui é o momento em que assina pedindo a senha da certificadora A3 em um popup;
esse resultado me retonar super extenso um livro do harrypotter, alguem passou ou esta com esse problema poderia me ajudar.
orbigado.
Set sd = Nothing
Set signer = Nothing
Call PreencheLayoutAssinatura
End Sub
BOA TARDE BARROS.
ENTAO BARROS.
A dll é microsoft nao teria pq nao funcionar seila.
um amigo meu me indicou fazer o seguinte:
adcionar no fonte acima
Dim has As New HashedData
has.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
has.Hash (Digest) [ô]aqui o conteudo digestvalue ( NWM3N2EyZWVmN2I1YzRiNTA5ZWVlMDVkZTYyZWU0MjIwYjAxN2JhZQ== )
sd.Content = has.value
signer.Certificate = Cert
Assinatura = sd.Sign(signer, True, CAPICOM.CAPICOM_ENCODE_BASE64)
aqui esta me retornando muito extenso: MIIX3wYJKoZIhvcNAQcCoIIX0DCCF8wCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3 ............
Eu ainda acredito que falta algum Parametro alguma regra para seguir.
ENTAO BARROS.
A dll é microsoft nao teria pq nao funcionar seila.
um amigo meu me indicou fazer o seguinte:
adcionar no fonte acima
Dim has As New HashedData
has.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
has.Hash (Digest) [ô]aqui o conteudo digestvalue ( NWM3N2EyZWVmN2I1YzRiNTA5ZWVlMDVkZTYyZWU0MjIwYjAxN2JhZQ== )
sd.Content = has.value
signer.Certificate = Cert
Assinatura = sd.Sign(signer, True, CAPICOM.CAPICOM_ENCODE_BASE64)
aqui esta me retornando muito extenso: MIIX3wYJKoZIhvcNAQcCoIIX0DCCF8wCAQExCzAJBgUrDgMCGgUAMAsGCSqGSIb3 ............
Eu ainda acredito que falta algum Parametro alguma regra para seguir.
Consegui obter um resultado Diferente na assinatura adcionando estes atributos, mas ainda nao esta correto
Dim sd As New SignedData
Dim signer As New CAPICOM.signer
Dim Stor As New Store
Dim Cert As Certificate
Dim Certs As New Certificates
Dim CForNext As Integer
Dim has As New HashedData
Dim teste2 As New CAPICOM.Attribute
Stor.Open CAPICOM_CURRENT_USER_STORE, [Ô]MY[Ô], CAPICOM_STORE_OPEN_READ_ONLY
[ô]Limpa a lista de certificados instalados e adicionar os certificados existentes na lista
Certs.Clear
For CForNext = 1 To Stor.Certificates.Count
Certs.Add Stor.Certificates.Item(CForNext)
Next CForNext
[ô]Escolher o certificado (aqui deixo a opção de escolher o certificado
[ô]Apenas como exemplo. O certificado poderia ser selecionado, sem a caixa de seleção
[ô]de certificados (repositório do windows) informando diretamente o Ãndice do certificado
[ô]como 0 ou 1...
Set Certs = Certs.Select([Ô]TLMKT[Ô], [Ô]Selecione o Certificado Digital.[Ô], False)
[ô]Exibir mensagem com data de validade do certificado
[ô]Pegar o texto do certificado que é usado para assinatura
For Each Cert In Certs
Me.Text1.Text = Cert.SubjectName
[ô]Assinatura = Cert.SubjectName
MsgBox ([Ô]Nome do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME))
MsgBox ([Ô]e-Mail do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME))
MsgBox ([Ô]Dados do Certificado (que fica no UniNFeConfig.XML:[Ô] & Cert.IssuerName)
MsgBox ([Ô]Data de criação do certificado:[Ô] & _
Cert.ValidFromDate)
MsgBox ([Ô]Certificado válido até:[Ô] & Cert.ValidToDate)
Chave = Cert.PrivateKey
Vx509 = Cert.Export(CAPICOM_ENCODE_BASE64) [ô]preenche tag x509certificate
has.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
[ô]has.Hash (Cert.Thumbprint)
[ô]has.Hash (Digest)
[ô]sd.Certificates
[ô]sd.Content = has.value
signer.Certificate = Stor.Certificates.Item(1)
sd.Content = Digest
teste2.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME
teste2.value = Cert.SubjectName [ô]pega o name certificado
signer.AuthenticatedAttributes.Add teste2
Assinatura = sd.Sign(signer, True, CAPICOM.CAPICOM_ENCODE_BASE64)
Next
Set has = Nothing
Set sd = Nothing
Set signer = Nothing
End Sub
Dim sd As New SignedData
Dim signer As New CAPICOM.signer
Dim Stor As New Store
Dim Cert As Certificate
Dim Certs As New Certificates
Dim CForNext As Integer
Dim has As New HashedData
Dim teste2 As New CAPICOM.Attribute
Stor.Open CAPICOM_CURRENT_USER_STORE, [Ô]MY[Ô], CAPICOM_STORE_OPEN_READ_ONLY
[ô]Limpa a lista de certificados instalados e adicionar os certificados existentes na lista
Certs.Clear
For CForNext = 1 To Stor.Certificates.Count
Certs.Add Stor.Certificates.Item(CForNext)
Next CForNext
[ô]Escolher o certificado (aqui deixo a opção de escolher o certificado
[ô]Apenas como exemplo. O certificado poderia ser selecionado, sem a caixa de seleção
[ô]de certificados (repositório do windows) informando diretamente o Ãndice do certificado
[ô]como 0 ou 1...
Set Certs = Certs.Select([Ô]TLMKT[Ô], [Ô]Selecione o Certificado Digital.[Ô], False)
[ô]Exibir mensagem com data de validade do certificado
[ô]Pegar o texto do certificado que é usado para assinatura
For Each Cert In Certs
Me.Text1.Text = Cert.SubjectName
[ô]Assinatura = Cert.SubjectName
MsgBox ([Ô]Nome do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_SIMPLE_NAME))
MsgBox ([Ô]e-Mail do cliente:[Ô] & _
Cert.GetInfo(CAPICOM_CERT_INFO_SUBJECT_EMAIL_NAME))
MsgBox ([Ô]Dados do Certificado (que fica no UniNFeConfig.XML:[Ô] & Cert.IssuerName)
MsgBox ([Ô]Data de criação do certificado:[Ô] & _
Cert.ValidFromDate)
MsgBox ([Ô]Certificado válido até:[Ô] & Cert.ValidToDate)
Chave = Cert.PrivateKey
Vx509 = Cert.Export(CAPICOM_ENCODE_BASE64) [ô]preenche tag x509certificate
has.Algorithm = CAPICOM_HASH_ALGORITHM_SHA1
[ô]has.Hash (Cert.Thumbprint)
[ô]has.Hash (Digest)
[ô]sd.Certificates
[ô]sd.Content = has.value
signer.Certificate = Stor.Certificates.Item(1)
sd.Content = Digest
teste2.Name = CAPICOM_AUTHENTICATED_ATTRIBUTE_DOCUMENT_NAME
teste2.value = Cert.SubjectName [ô]pega o name certificado
signer.AuthenticatedAttributes.Add teste2
Assinatura = sd.Sign(signer, True, CAPICOM.CAPICOM_ENCODE_BASE64)
Next
Set has = Nothing
Set sd = Nothing
Set signer = Nothing
End Sub
Faça seu login para responder