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