private CertificadoDigital(X509Certificate2 certificado, CertificadoDigitalOptions options) { Erro = false; TipoCertificado = TipoCertificado.Invalido; try { RawCertDataString = certificado.GetRawCertDataString(); } catch { Erro = true; ErroMensagem = CertificadoException.GetErrorMessage(CertificadoException.CertificadoExceptionTipo.CertificadoInvalido); return; } if (options.ValidarCadeia && CadeiaInvalida(certificado, options)) { return; } TipoCertificado = ObterTipo(certificado); switch (TipoCertificado) { case TipoCertificado.ECpf: PessoaFisica = ObterDadosPessoaFisica(certificado); break; case TipoCertificado.ECnpj: var(pessoaJuridica, pessoaFisica) = ObterDadosPessoaJuridica(certificado); PessoaJuridica = pessoaJuridica; PessoaFisica = pessoaFisica; break; } }
public static CertificadoDigital Processar(byte[] buffer, CertificadoDigitalOptions options) { _ = buffer ?? throw new ArgumentNullException(nameof(buffer)); using var certificado = new X509Certificate2(buffer); return(new CertificadoDigital(certificado, options)); }
private bool CadeiaInvalida(X509Certificate2 certificado, CertificadoDigitalOptions options) { using var store = new X509Store(StoreName.Root, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); var raizesIcpBrasil = store.Certificates.Find(X509FindType.FindByIssuerName, RaizIcpBrasil, true); using (var chain = new X509Chain()) { if (options.ValidarRevogacao) { chain.ChainPolicy.RevocationFlag = X509RevocationFlag.EntireChain; } else { chain.ChainPolicy.RevocationMode = X509RevocationMode.NoCheck; } if (chain.Build(certificado)) { CadeiaValida = true; } else if (chain.ChainStatus.Any(x => x.Status == X509ChainStatusFlags.NotTimeValid) && options.ValidarRevogacao) { ErroMensagem = CertificadoException.GetErrorMessage(CertificadoException.CertificadoExceptionTipo .CertificadoExpirado); Erro = true; return(true); } else if ( (options.ValidarRaizConfiavel && chain.ChainStatus.Any(x => x.Status != X509ChainStatusFlags.NotTimeValid)) || (!options.ValidarRaizConfiavel && chain.ChainStatus.Any(x => x.Status != X509ChainStatusFlags.NotTimeValid && x.Status != X509ChainStatusFlags.UntrustedRoot))) { ErroMensagem = CertificadoException.GetErrorMessage(CertificadoException.CertificadoExceptionTipo .CadeiaInvalida); Erro = true; return(true); } var certificadoRaiz = chain.ChainElements[^ 1].Certificate;
public static CertificadoDigital Processar(X509Certificate2 certificado, CertificadoDigitalOptions options) { _ = certificado ?? throw new ArgumentNullException(nameof(certificado)); return(new CertificadoDigital(certificado, options)); }