Ir para conteúdo
  • Cadastre-se

dev botao

Programa Para Fazer A Assinatura Para Certificados A3 Em C#


Rafa Moraes
Ver Solução Respondido por Marcio OFFSuporte,
  • Este tópico foi criado há 2690 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Pessoal Boa tarde,

testei todos os programas todos me retornam os mesmo 344 caracteres, mas na hora de eu assinar junto ao SAT me retorna sempre o mesmo erro 13004 "CNPJ da Software House + CNPJ do emitente assinado no campo 'signAC' difere do informado no campo 'CNPJvalue'

usando o linker manager 

o que pode ser?

Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...

'Para quem quiser, segue um exemplo em VB.NET que gera a chave para certificados A3.

'Caso o certificado não possua CNPJ no subject, localizar pelo número serial.

Imports System
Imports System.Collections.Generic
Imports System.Text
Imports System.Collections
Imports System.Security
Imports System.Security.Cryptography
Imports System.Security.Cryptography.X509Certificates
Imports System.Security.Cryptography.Pkcs
Imports System.Security.Cryptography.Xml
Imports System.Xml
Imports System.Xml.Schema
 
   Private Function GetChaveSAT(CNPJSoftwareHouse As String, CNPJEstbComercial As String) As String
        'Procura pelo certificado da sofwarehouse no repositório do Windows
        Dim cert As X509Certificate2 = FindCertOnStore(CNPJEstbComercial)
        'Se não achar o certificado, finaliza
        If cert Is Nothing Then
            MessageBox.Show("Certificado não encontrado")
            Return ""
        End If
        'Cria chave criptografada
        Dim rsa As RSACryptoServiceProvider = cert.PrivateKey
        Dim data As Byte() = Encoding.UTF8.GetBytes(CNPJSoftwareHouse + CNPJEstbComercial)
        Dim sig As Byte() = rsa.SignData(data, "SHA256")
        Dim base64sign As String = Convert.ToBase64String(sig)
        Return base64sign
    End Function
    Private Function FindCertOnStore(CNPJ As String) As X509Certificate
        Dim st As New X509Store(StoreLocation.CurrentUser)
        st.Open(OpenFlags.ReadOnly)
        For Each cert As X509Certificate In st.Certificates
            If cert.Subject.IndexOf(CNPJ) > -1 Then
                Return cert
            End If
        Next
        Return Nothing
    End Function

'E se for A1, mais fácil ainda:

 Private Function GetChaveSAT(CNPJSoftwareHouse As String, CNPJEstbComercial As String) As String
        'Cria o certificado A1
        Dim cert As New X509Certificate2("C:\meucertificado.pfx", "senha1234")

        'Se não achar o certificado, finaliza
        If cert Is Nothing Then
            MessageBox.Show("Certificado não encontrado")
            Return ""
        End If
        'Cria chave criptografada
        Dim rsa As RSACryptoServiceProvider = cert.PrivateKey
        Dim data As Byte() = Encoding.UTF8.GetBytes(CNPJSoftwareHouse + CNPJEstbComercial)
        Dim sig As Byte() = rsa.SignData(data, "SHA256")
        Dim base64sign As String = Convert.ToBase64String(sig)
        Return base64sign
    End Function
 
Link para o comentário
Compartilhar em outros sites

  • 1 mês depois ...
  • Este tópico foi criado há 2690 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...