Retirar janela de solicitação de PIN - Certificado A3

2,186 views
Skip to first unread message

Renan Henrique

unread,
Oct 10, 2015, 1:32:34 PM10/10/15
to dotn...@googlegroups.com, dotnetar...@googlegroups.com
Boa tarde pessoal,

Alguém já trabalhou com certificado A3? Quando escolhe o certificado ele solicita senha do PIN.
Eu queria deixar automatico isso, se não o cliente terá que digitar o PIN toda hora.
Qualquer ajuda é bem vinda, agradeço.

Na linha: 
          SignedDocument.ComputeSignature();
Ele pede a senha do PIN.
Já tentei carregar um certificado com a senha e também não foi.

X509Certificate2 xCert = new X509Certificate2(x509.RawData, "senha", flags);


Já tentei também preencher a senha usando os controler do windows, mas também não foi:


            IntPtr handle_pai = GetDesktopWindow();
            List<JanelaInfo> lst = ListaJanelas(handle_pai);
            JanelaInfo JanelaTextoPin = lst.Where(r => r.NomeDaClasse == "RICHEDIT50W").FirstOrDefault();

            bool t = SetWindowText(JanelaTextoPin.Handle, "abc");
            SendMessage(JanelaTextoPin.Handle, WM_SETTEXT, IntPtr.Zero, "senha");


Código para assinar o XML que pede a senha do PIN.

        public static XmlDocument Assinar(string mensagemXML, System.Security.Cryptography.X509Certificates.X509Certificate2 certificado)
        {
            System.Xml.XmlDocument xmlDoc = new System.Xml.XmlDocument();
            System.Security.Cryptography.RSACryptoServiceProvider Key = new System.Security.Cryptography.RSACryptoServiceProvider();
            System.Security.Cryptography.Xml.SignedXml SignedDocument = default(System.Security.Cryptography.Xml.SignedXml);
            System.Security.Cryptography.Xml.KeyInfo keyInfo = new System.Security.Cryptography.Xml.KeyInfo();
            xmlDoc.LoadXml(mensagemXML);
            //Retira chave privada ligada ao certificado
            Key = (System.Security.Cryptography.RSACryptoServiceProvider)certificado.PrivateKey;
            //Adiciona Certificado ao Key Info
            keyInfo.AddClause(new System.Security.Cryptography.Xml.KeyInfoX509Data(certificado));
            SignedDocument = new System.Security.Cryptography.Xml.SignedXml(xmlDoc);
            //Seta chaves
            SignedDocument.SigningKey = Key;
            SignedDocument.KeyInfo = keyInfo;

            System.Security.Cryptography.Xml.Reference reference = new System.Security.Cryptography.Xml.Reference();
            reference.Uri = string.Empty;
            // Adiciona transformacao a referencia
            reference.AddTransform(new System.Security.Cryptography.Xml.XmlDsigEnvelopedSignatureTransform());
            reference.AddTransform(new System.Security.Cryptography.Xml.XmlDsigC14NTransform(false));
            // Adiciona referencia ao xml
            SignedDocument.AddReference(reference);
            // Calcula Assinatura
            SignedDocument.ComputeSignature();
            // Pega representação da assinatura
            System.Xml.XmlElement xmlDigitalSignature = SignedDocument.GetXml();
            // Adiciona ao doc XML
            xmlDoc.DocumentElement["Rps"].AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));
            return xmlDoc;
        }

--

Renan Henrique
Analista Desenvolvedor .Net/SQL

MCTS - Microsoft Certified Technology Specialist
GTalk - MSN: 
rena...@gmail.com 


Acaz Souza Pereira

unread,
Oct 10, 2015, 1:40:43 PM10/10/15
to .Net Architects, dotn...@googlegroups.com
Olá amigo, não sei se entendi muito bem sua dúvida, mas se você não quer que o usuário digite a senha sempre que inserir um certificado, você deve salvar a senha dele quando ele digitar pela primeira vez, não?

O certificado em sí, pelo que sei não tem a senha embutido, se não seria falha de segurança concorda?

Renan Henrique

unread,
Oct 10, 2015, 2:03:30 PM10/10/15
to dotn...@googlegroups.com
Sim...mas deram a sugestão de iniciar com senha em alguns sites por isso tentei daquele jeito.
Esse certificado ai que estou usando A3, é um certificado fisico.
Eu só não quero que peça senha mais, queria colocar a senha dentro do código. 
Esse projeto é um serviço que fica rodando no windows enviando as notas, não tem cabimento do nada ficar pedindo a senha rs...
mas ta foda, fiz tudo já, só falta isso...

--
==============================
Comunidade de desenvolvedores Dot Net no Brasil
 
Facebook: www.facebook.com/grupodotnetbr
 
WebSite: www.dotnetbr.com
 
E-mail do Grupo: dotn...@googlegroups.com
==============================
---
You received this message because you are subscribed to the Google Groups "DotNet Brasil" group.
To unsubscribe from this group and stop receiving emails from it, send an email to dotnet_br+...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Neryval Lima

unread,
Oct 11, 2015, 6:34:45 AM10/11/15
to dotn...@googlegroups.com
to com o mesmo problema!


Neryval Lima

+55 71 8104.9679 Claro
Skype : neryval.lima

Controle Operacional e Financeiro para micro e pequenas empresas
Agora Com Loja Virtual Integrada!

Geradores Eólicos

Acaz Souza Pereira

unread,
Oct 11, 2015, 2:25:41 PM10/11/15
to DotNet Brasil, dotnetar...@googlegroups.com
Carregando o certificado com a senha, deveria funcionar, eu tenho isso funcionando:

var certificate = new X509Certificate2(this.RawData, this.Password);

Em sábado, 10 de outubro de 2015 14:32:34 UTC-3, Renan Henrique escreveu:

Renan Henrique

unread,
Oct 11, 2015, 8:42:20 PM10/11/15
to dotn...@googlegroups.com

eu tenho isso também, mas pede mesmo assim rs...  acho que essa senha do pin nao é  a mesma senha do certificado.

Bruno Pessanha

unread,
Oct 13, 2015, 5:17:52 AM10/13/15
to dotn...@googlegroups.com
Olá Renan, se é um serviço que fica rodando no window e enviando as notas, por que não utiliza um certificado do tipo A1? Ele vai ficar instalado na máquina e não precisa de PIN.

Marcelo de Souza (Unimake)

unread,
Oct 13, 2015, 8:01:54 AM10/13/15
to dotn...@googlegroups.com
Olá ...

Dá uma olhada neste projeto...

Nesta classe
https://uninfe.codeplex.com/SourceControl/latest#NFe.Certificado/AssinaturaDigital.cs

Tem um método chamado "LerDispositivo"... Ele faz o que você precisa

[]´s

Atenciosamente

Renan Henrique

unread,
Oct 13, 2015, 4:30:56 PM10/13/15
to dotn...@googlegroups.com
Bruno, gerente passou assim, falou que tinha que ser nesse certificado, então, sem possibilidade de mudança, rs...Avisei ele que era mais tranquilo no outro, mas enfim.

No momento eu fiz uma macro para contornar.
Vou testar agora o código do Marcelo, obrigado.
Reply all
Reply to author
Forward
0 new messages