FAQ: Uso de e-CPF ou e-CNPJ para autenticação de aplicações 27 junho 2010 msincic .NET, IIS, Outros A algum tempo que atualizo e mantenho atualmente no MSDN um documento de como utilizar certificados digitais na autenticação de clientes (http://msdn.microsoft.com/pt-br/library/ee923720.aspx). Porem, neste artigo abordamos a autenticação utilizando certificados emitidos pelo próprio cliente com uma CA seja no Windows 2003 ou no Windows 2008 (para as diferentes versões do Windows veja o link http://www.marcelosincic.com.br/blog/page/Artigos-e-Apostilas.aspx. Recebo semanalmente perguntas e dúvidas sobre como utilizar o e-CNPJ e o e-CPF para fazer a autenticação e resolvi fazer este post em forma de FAQ das principais perguntas que recebo. 1. É necessário ter um certificado de autoridades públicas para autenticar e-CPF ou e-CNPJ? Resposta: É necessário ter um certificado válido para instalar no seu IIS. Nos artigos acima a raiz certificadora (CA) não é válida na internet e a CRL muitas vezes está em um ambiente interno. Esta característica faz com que o browser não reconheça a CA ou não acesse a CRL e rejeite o certificado com a mensagem de erro devida. Como o browser não validou o certificado do servidor, ele não irá solicitar para o cliente o certificado dele. 2. Este certificado tem que ser emitido por uma certificadora vinculada ao ICP-Brasil (SERASA, CertiSign, CEF e outras) para autenticar e-CPF ou e-CNPJ? Resposta: Teoricamente não, mas é preferencial. O problema de utilizar uma certificadora não vinculada a raiz do ICP-Brasil é que a autoridade não estará na lista de confiança, e mesmo podendo ser adicionada manualmente (veja questões abaixo) em alguns casos pode ocorrer a leitura parcial do certificado. 3. Eu tenho um e-CPF ou e-CNPJ e o meu servidor é certificado pela ICP-Brasil e mesmo assim não solicita o meu certificado. Porque? Resposta: Você precisa montar a lista de autoridades certificadoras para que o certificado seja aceito e o motivo é que o ICP-Brasil não é um único emissor nem um único CA (veja questões abaixo). Para montar a lista de certificadoras aceitas verifique no documento do MSDN no inicio do post. 4. Alguns cartões ou tokens são aceitos e outros não, o que está acontecendo? Resposta: O ICP-Brasil apresenta duas características que podem causar isso. A primeira é que a cadeia dos certificados é, por exemplo, “Autoridade Certificadora Brasileira –> Secretaria da Receita Federal (RFB) –> SERASA” e você irá precisar colocar o primeiro nível como “Autoridades Raiz Confiáveis” e as duas seguintes como “Autoridades Intermediarias Confiáveis” (veja como na continuação das perguntas). O outro problema é que existem duas “Autoridade Certificadora Brasileira” que é o nome apenas e outras com “v1”. Ou seja, cartões e tokens emitidos antes de 2009 utilizam o certificado da primeira versão e os mais atuais da “v1” que é a mais recente. Portanto você precisará instalar os dois como raízes confiáveis. 5. Mesmo colocando os dois “Autoridade Certificadora Brasileira” na lista de confiáveis o token não aparece. Porque? Resposta: Não é apenas a raiz que tem variações, mas também os certificados intermediários, que podem ser a “Secretaria da Fazenda”, “Receita Federal”, “SERAZA”, “CertiSign”, etc. Você precisa colocar estes como “Autoridades Intermediárias Certificadoras Confiáveis” (como encontrar todas elas veja perguntas abaixo). 6. Como incluo as raízes e intermediárias do ICP-Brasil no meu servidor? Resposta: Abra o MMC e adicione o snap-in “Certificados” mas note que não “Usuário” e sim “Computador”. Não basta apenas dar duplo clique no arquivo “cer” para incluir, porque neste caso você estaria incluindo no usuário e não na máquina. Após incluir o snap-in clique com o botão direito nos locais e use a opção “Importar”. Veja na imagem abaixo onde deve ser incluído os certificados raízes “Autoridade Certificadora Brasileira” e os intermediários “Serasa”, “Certisign”, “RFB”, etc: 7. Onde encontro a lista com todos os certificadores e os certificados emitidos por eles? Resposta: Utilize este endereço: http://www.iti.gov.br/twiki/bin/view/Certificacao/RepositoriodaACRaiz que contem as informações de todos os certificados existentes tanto as duas raízes quanto suas intermediárias. Note que indica quais os tipos de certificados e no caso do ICP-Brasil são A1 e A3. 8. No Internet Explorer e no Chrome funcionou logo na primeira vez e no Firefox não, o que acontece? Resposta: O IE e o Chrome já possuem o ICP-Brasil na lista de autoridades, já o Firefox até hoje não implementou (http://br.mozdev.org/drupal/2008/07/icp-brasil-deve-ser-adicionado-ao-firefox) e é necessário fazer manualmente. No post da Mozilla ou no do ITI na pergunta anterior siga as instruções, lembrando que deve ser feito no cliente. Porem, note que o aplicativo do leitor do cartão normalmente tem a opção para fazer essa inclusão de forma automática. 9. Como leio os dados do certificado alem do “subjet” citado no artigo do MSDN? Resposta: Utilizando o código abaixo é possivel ler os dados em uma aplicação Windows Form, basta converter o “Request.Certificate” que consta no artigo para o tipo X509Certificate2: System.Security.Cryptography.X509Certificates.X509Store Lista = new System.Security.Cryptography.X509Certificates.X509Store(); Lista.Open(System.Security.Cryptography.X509Certificates.OpenFlags.IncludeArchived); for (int Contador = 0; Contador < Lista.Certificates.Count; Contador++) { System.Security.Cryptography.X509Certificates.X509Certificate2 Certificado = Lista.Certificates[Contador]; MessageBox.Show(Certificado.ToString()); string Dados = Certificado.Subject; listBox1.Items.Add(Dados); if (Dados.IndexOf("e-CPF") > 0 || Dados.IndexOf("e-CNPJ") > 0) { Dados = Dados.Remove(0, Dados.IndexOf(":") + 1); Dados = Dados.Remove(Dados.IndexOf("OU=") - 2); listBox1.Items.Add("e-CPF/e-CNPJ = " + Dados); } } Espero ter respondido as principais perguntas, e caso surjam novas vou atualizando este post.
Artigo no MSDN: Utilizando Certificados Digitais para autenticação de usuários 23 fevereiro 2010 msincic .NET Foi aprovado a publicação do meu artigo na biblioteca do MSDN: http://msdn.microsoft.com/pt-br/library/ee923720.aspx Já me deparei muitas vezes com clientes em consultorias inventando formas de autenticar usuários do jeito mais criativo possivel. Porem, a forma mais segura atualmente de fazer isso é utilizando certificados digitais privados, publicos ou governamentais (como o e-cpf e o e-cnpj). Tem dúvidas de como fazer? Eu já havia deixado o artigo publicado para download em minha seção de "Apostilas e Artigos" (http://www.marcelosincic.com.br/blog/page/Artigos-e-Apostilas.aspx), mas agora tambem está disponivel pelo MSDN (link no começo do post).
Artigo sobre certificação digital para aplicações web 14 abril 2009 msincic .NET, IIS, Windows 2003, Windows 2008 Artigo sobre Certificados digitais pra autenticação de usuarios [Leia mais]