public static X509Certificate2 Consultar(string valor, StoreName storeName, StoreLocation storeLocation, TipoConsultaCertificado tpConsultaTipoCertificado) { System.Security.Cryptography.X509Certificates.X509Certificate2 _X509Cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(); try { X509Store store = new X509Store(storeName, storeLocation); 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 (valor == "") { //Exibe uma lista de certificado existentes na maquina do usuário 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) { return(scollection[0]); } } else { //Consulta com base no tipo de solicitação X509Certificate2Collection scollection = null; switch (tpConsultaTipoCertificado) { case TipoConsultaCertificado.PorNome: scollection = (X509Certificate2Collection)collection2 .Find(X509FindType.FindBySubjectDistinguishedName, valor, false); break; case TipoConsultaCertificado.PorNroSerie: scollection = (X509Certificate2Collection)collection2 .Find(X509FindType.FindBySerialNumber, valor, true); break; } if (scollection != null) { if (scollection.Count > 0) { return(scollection[0]); } } } store.Close(); } catch (System.Exception ex) { string msg = string.Format("Erro ao consultar o cetificado digital:{0}", ex.Message); throw new Exception(msg); } return(null); }
public static X509Certificate2 Consultar(StoreName storeName, StoreLocation storeLocation, string valor, TipoConsultaCertificado tpConsultaTipoCertificado) { System.Security.Cryptography.X509Certificates.X509Certificate2 _X509Cert = new System.Security.Cryptography.X509Certificates.X509Certificate2(); try { X509Store store = new X509Store(storeName, storeLocation); 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); LogHelper.GravarLog("StoreName=" + storeName.ToString() + " location=" + storeLocation.ToString()); if (valor == "") { //Exibe uma lista de certificado existentes na maquina do usuário 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) { return(scollection[0]); } } else { //Consulta com base no tipo de solicitação X509Certificate2Collection scollection = null; switch (tpConsultaTipoCertificado) { case TipoConsultaCertificado.PorNome: scollection = (X509Certificate2Collection)collection2 .Find(X509FindType.FindBySubjectDistinguishedName, valor, false); break; case TipoConsultaCertificado.PorNroSerie: LogHelper.GravarLog("Listar os certificados"); foreach (var cert in store.Certificates) { string serial = cert.SerialNumber; LogHelper.GravarLog("certificado:" + serial + ".valor passado:" + valor + "."); if (string.Compare(serial, valor) == 0) { return(cert); } } break; } if (scollection != null) { if (scollection.Count > 0) { return(scollection[0]); } } } store.Close(); } catch (System.Exception ex) { string msg = string.Format("Erro ao consultar o cetificado digital:{0}", ex.Message); LogHelper.GravarLog("Erro BUSCA CERTIFICADO " + " \n " + ex.StackTrace); throw new Exception(msg); } return(null); }