none
Assinatura digital certificado A3 - só funciona em desenvolvimento RRS feed

  • Pergunta

  • Pessoal, estou com o seguinte problema:

    No ambiente de desenvolvimento está chamando corretamento a JANELA que lista os certificados e efetua a assinatura.

    No ambiente de produção, ja testei numa maquina Win2008, 2003 e Win7 ... Todas não funcionaram, não abrem essa tela.

    Já instalei os certificados e todas as raizes dos certificados nas maquinas, abaixo o trecho do codigo que chama a tela de assinatura:

    Function SelecionaCertificado() As X509Certificate2
            Dim texto As String = ""
            Dim Retorno As X509Certificate2
            Dim store As New X509Store("MY", StoreLocation.CurrentUser)
            store.Open(OpenFlags.ReadOnly Or OpenFlags.OpenExistingOnly)
            Dim collection As X509Certificate2Collection = CType(store.Certificates, X509Certificate2Collection)
            Dim fcollection As X509Certificate2Collection = CType(collection.Find(X509FindType.FindByTimeValid, DateTime.Now, False), X509Certificate2Collection)
            Dim scollection As X509Certificate2Collection = X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate Select", "Select a certificate from the following list to get information on that certificate", X509SelectionFlag.MultiSelection)
    
            Dim x509 As X509Certificate2
            For Each x509 In scollection
                Dim rawdata As Byte() = x509.RawData
                Retorno = x509
                Exit For
                ' x509.Reset()
            Next x509
            store.Close()
            Return Retorno
    
        End Function

    quinta-feira, 27 de setembro de 2012 20:10

Respostas

  • Já tive este problema.

    Obs: voce não disse o tipo de certificado, mas para o A1 funciona; certificado A3 não testei.

    Encontrei uma solução no meu caso após ralar pra caramba, não tem documentação.

      MMC

         

       ADICIONAR O CERTIFICADO 
         conta do computador  (windows xp)   (Windows 7 nem precisei instalar aqui)

      EM PESSOAS CONFIAVEIS OU (TRUSTED PEOPLE)

    public class Certificado
        {
            public X509Certificate2 BuscaCertPorNome(string Nome, bool ehSelecionar)
            {
                X509Certificate2 _X509Cert = new X509Certificate2();
                try
                {
                    X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
                    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                    X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                    X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                    X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
    
                    if (Nome.Trim() != "")
                    {
                        X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectDistinguishedName, Nome, false);
                        if (scollection.Count == 0)
                        {
                            _X509Cert = null;
                        }
                        else
                        {
                            _X509Cert = scollection[0];
                        }
                    }
                    else
                    {
                        _X509Cert = null;
                    }
                    store.Close();
                    return _X509Cert;
                }
                catch (System.Exception ex)
                {
                    _X509Cert = null;
                    return _X509Cert;
                }
            }
        }

    Espero que te ajude.


    • Editado Jose Geraldo quarta-feira, 10 de outubro de 2012 15:16 n
    • Marcado como Resposta Felipo Gonçalves sexta-feira, 14 de junho de 2013 12:01
    quarta-feira, 10 de outubro de 2012 15:10

Todas as Respostas

  • Qual o tipo de aplicação? você está utilizando VB.Net certo?

    Se for win app - deveria funcionar normalmente. Tive problemas com certifado A3 quando criei um windows service.

    Segue abaixo o código C# que utilizo em varias aplicações e todas funcionando.  Percebi algumas diferenças entre os códigos. Valide ai.

            public X509Certificate2 BuscaCertPorNome(string Nome)
            {
                X509Certificate2 _X509Cert = new X509Certificate2();
                try
                {
    
                    X509Store store = new X509Store("MY", StoreLocation.CurrentUser);
                    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                    X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                    X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                    X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
                    if (Nome == "")
                    {
                        X509Certificate2Collection scollection = X509Certificate2UI.SelectFromCollection(collection2, "Certificado(s) Digital(is) disponível(is)", "Selecione o Certificado Digital para uso no aplicativo", X509SelectionFlag.SingleSelection);
                        if (scollection.Count == 0)
                        {
                            _X509Cert.Reset();
                            Console.WriteLine("Nenhum certificado escolhido", "Atenção");
                        }
                        else
                        {
                            _X509Cert = scollection[0];
                        }
                    }
                    else
                    {
                        X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectDistinguishedName, Nome, false);
                        if (scollection.Count == 0)
                        {
                            Console.WriteLine("Nenhum certificado válido foi encontrado com o nome informado: " + Nome, "Atenção");
                            _X509Cert.Reset();
                        }
                        else
                        {
                            _X509Cert = scollection[0];
                        }
                    }
                    store.Close();
                    return _X509Cert;
                }
                catch (System.Exception ex)
                {
                    Console.WriteLine(ex.Message);
                    return _X509Cert;
                }
            }
    

    • Marcado como Resposta Harley Araujo segunda-feira, 1 de outubro de 2012 11:59
    • Não Marcado como Resposta Antonio D'Ornellas quarta-feira, 3 de outubro de 2012 17:13
    sexta-feira, 28 de setembro de 2012 13:46
  • Obrigado pelo retorno Harley, mas mesmo assim não funcionou. Só chama a janela de certificados rodando local.

    Estou usando ASP.NET 4.0 com VB.

    quarta-feira, 3 de outubro de 2012 17:14
  • Você não precisa instalar o certificado nas outras máquinas?

    Que erro ocorre? Poste a mensagem aqui.


    É possível sim! Ponha isso na sua cabeça. É possível. "Steve Jobs"

    Eduardo Pires
    www.eduardopires.net.br

           

    quarta-feira, 3 de outubro de 2012 18:53
  • Qual o tipo de sua aplicação? web, winform, serviço ou console?

     
    quinta-feira, 4 de outubro de 2012 09:48
  • Web ... 
    segunda-feira, 8 de outubro de 2012 14:01
  • Quando rodo no Visual Studio funciona normal, na minha maquina.

    Quando coloco no IIS na minha maquina ou no servidor, ambas com o certificado instalado, já não funciona.


    segunda-feira, 8 de outubro de 2012 14:04
  • faz um log para pegar o erro e posta aqui

    Não esqueça de usar o componente </> na barra para posta seu código. Microsoft MCPD,MCTS,MCC

    terça-feira, 9 de outubro de 2012 18:00
    Moderador
  • Já tive este problema.

    Obs: voce não disse o tipo de certificado, mas para o A1 funciona; certificado A3 não testei.

    Encontrei uma solução no meu caso após ralar pra caramba, não tem documentação.

      MMC

         

       ADICIONAR O CERTIFICADO 
         conta do computador  (windows xp)   (Windows 7 nem precisei instalar aqui)

      EM PESSOAS CONFIAVEIS OU (TRUSTED PEOPLE)

    public class Certificado
        {
            public X509Certificate2 BuscaCertPorNome(string Nome, bool ehSelecionar)
            {
                X509Certificate2 _X509Cert = new X509Certificate2();
                try
                {
                    X509Store store = new X509Store(StoreName.TrustedPeople, StoreLocation.LocalMachine);
                    store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
                    X509Certificate2Collection collection = (X509Certificate2Collection)store.Certificates;
                    X509Certificate2Collection collection1 = (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
                    X509Certificate2Collection collection2 = (X509Certificate2Collection)collection.Find(X509FindType.FindByKeyUsage, X509KeyUsageFlags.DigitalSignature, false);
    
                    if (Nome.Trim() != "")
                    {
                        X509Certificate2Collection scollection = (X509Certificate2Collection)collection2.Find(X509FindType.FindBySubjectDistinguishedName, Nome, false);
                        if (scollection.Count == 0)
                        {
                            _X509Cert = null;
                        }
                        else
                        {
                            _X509Cert = scollection[0];
                        }
                    }
                    else
                    {
                        _X509Cert = null;
                    }
                    store.Close();
                    return _X509Cert;
                }
                catch (System.Exception ex)
                {
                    _X509Cert = null;
                    return _X509Cert;
                }
            }
        }

    Espero que te ajude.


    • Editado Jose Geraldo quarta-feira, 10 de outubro de 2012 15:16 n
    • Marcado como Resposta Felipo Gonçalves sexta-feira, 14 de junho de 2013 12:01
    quarta-feira, 10 de outubro de 2012 15:10
  • Pessoal, alguém conseguiu fazer a aplicação web + certificado a3 funcionar no IIS? Estou com o mesmo problema de funcionar só no visual studio e no IIS nada....
    segunda-feira, 22 de julho de 2013 21:01
  • Antonio, boa tarde!

    Você conseguiu resolver o seu problema?

    Tenho que fazer algo semelhante, criar um aplicação que leia o certificado A3 do cliente e valida, semelhante a esse (https://www.certisign.com.br/atendimento-suporte/certificado-digital/teste-certificado).

    Você pode me ajudar?

    Meu site já é https, preciso aprender a ler os dados do certificado do cliente.

    Se tive algum matéria e puder disponibilizar ficarei grato.

    Fica com Deus!


    Posso não concordar com o que vc disse, mas lutarei até a morte pelo seu direito de dizer...

    sexta-feira, 22 de janeiro de 2016 17:33
  • Pablo, bom dia!
    Estou enfrentando o mesmo problema, você conseguiu resolver? Abraço
    segunda-feira, 1 de fevereiro de 2016 12:10
  • Rodrigo, bom dia!
    Estou com o mesmo problema. 

    Não estou conseguindo ler o certificado A3 do cliente no meu servidor web. Você conseguiu resolver?

    segunda-feira, 1 de fevereiro de 2016 12:12
  • Não conseguir nd cara, estou tendo q partir para um SDK de terceiro.

    Pelo localhost vc conseguiu utilizando o código acima?

    Se não tem como disponibilizar o seu código?

    Obrigado!


    Posso não concordar com o que vc disse, mas lutarei até a morte pelo seu direito de dizer...

    segunda-feira, 1 de fevereiro de 2016 14:21