public CertificadoDigital(X509Certificate2 certificado) { try { ValidoAPartir = certificado.NotBefore; ValidoAte = certificado.NotAfter; PeriodoValido = DateTime.Now > certificado.NotBefore && DateTime.Now < certificado.NotAfter; TipoCertificado = ObterTipo(certificado); if (TipoCertificado == TipoCertificadoEnum.eCPF) { PessoaFisica = ObterDadosPessoaFisica(certificado); } else if (TipoCertificado == TipoCertificadoEnum.eCNPJ) { PessoaJuridica = ObterDadosPessoaJuridica(certificado); } } catch (Exception ex) { throw new CertificadoNetException("Erro na leitura do certificado", ex); } }
private PessoaJuridica ObterDadosPessoaJuridica(X509Certificate2 certificado) { try { byte[] extensao; ASN1Helper helper; string cnpj = null; string inss = null; string razaoSocial = null; string nomeReponsavel = null; string dadosResponsavel = null; string oid; int ini = certificado.Subject.IndexOf("CN=") + 3; int meio = certificado.Subject.IndexOf(":", ini); string razaoSocialCN; if (meio != -1) { razaoSocialCN = certificado.Subject.Substring(ini, meio - ini); } else { int fim = certificado.Subject.IndexOf(", ", ini) - 1; razaoSocialCN = certificado.Subject.Substring(ini, fim - ini + 1); } foreach (var ext in certificado.Extensions) { if (ext.Oid.Value == OID_NOME_ALTERNATIVO_SUJEITO) { if (ext.Format(false).Contains(OID_PJ_DADOS_RESPONSAVEL)) { extensao = ext.RawData; helper = new ASN1Helper(ref extensao); for (int i = 0; i < helper.TagList.Count; i++) { if (helper.TagList[i].TagId == TagID.OBJECT_IDENTIFIER) { oid = helper.TagList[i].Format(extensao); for (i++; (i < helper.TagList.Count) && ((helper.TagList[i].TagId != TagID.OCTET_STRING) && (helper.TagList[i].TagId != TagID.UTF8_STRING) && (helper.TagList[i].TagId != TagID.PrintableString)); i++) { ; } if (oid.Equals(OID_PJ_CNPJ)) { cnpj = helper.TagList[i].Format(extensao); } else if (oid.Equals(OID_PJ_INSS)) { inss = helper.TagList[i].Format(extensao); } else if (oid.Equals(OID_PJ_NOME_EMPRESARIAL)) { razaoSocial = helper.TagList[i].Format(extensao); } else if (oid.Equals(OID_PJ_NOME_RESPONSAVEL)) { nomeReponsavel = helper.TagList[i].Format(extensao); } else if (oid.Equals(OID_PJ_DADOS_RESPONSAVEL)) { dadosResponsavel = helper.TagList[i].Format(extensao); } } } if (razaoSocialCN != null && razaoSocial != null) { razaoSocial = $"{razaoSocial} ({razaoSocialCN})"; } else { razaoSocial = razaoSocial ?? razaoSocialCN; } var pessoaJuridica = new PessoaJuridica(cnpj, inss, razaoSocial, nomeReponsavel, dadosResponsavel); return(pessoaJuridica); } else { throw new CertificadoNetException(2); } } } return(null); } catch (Exception ex) { throw new CertificadoNetException(6, ex); } }