ASSINAR XML NFE VB6 USANDO CAPICOM

TIAGOBRYAN 13/09/2013 09:22:23
#428798
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

TIAGOBRYAN 13/09/2013 14:07:39
#428814
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.
TIAGOBRYAN 16/09/2013 18:05:23
#428923
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
Faça seu login para responder