Introdução ao desenvolvimento utilizando certificados digitais

by SrECosta abril 05, 2009 18:29

O básico: certificados digitais são utilizados para identificar indivíduos, recursos e serviços dentro de um ambiente computacional.

Agora, um pouco mais extendido. :)

É tudo uma questão de identidade. Pessoas, empresas, softwares, todos precisam informar quem são e de onde vêm.

A beleza dos certificados digitais é que eles garantem uma estrutura em que estes indivíduos podem afirmar quem são, porém, com condições e mecanismos que permitem sua confirmação. Cada certificado digital contém informações básicas sobre seu proprietário e, mais importante, sobre a entidade que pode confirmá-lo.

A adoção deste tipo de certificado aumenta diariamente. Não entenda com isto que estes certificados são tecnologia futura. Longe disso. Os certificados são tecnologia utilizada no dia a dia e, citando dois exemplos, você não faria compras na internet ou pagaria contas no seu banco on line se eles já não houvessem sido implantados. Quando o dinheiro, ou melhor, crédito, começou a ser utilizado na internet os certificados já estavam lá pois era necessário "confiar" na identidade dos sites que lidavam com isto.

Entender o uso dos certificados digitais e para quê eles servem é presumivelmente simples. O complicado é entender como eles funcionam e toda a estrutura que os suporta. Você pode aprender sobre certificados digitais com uma visão de TI, ou seja, preocupando-se com a infra-estrutura que os faz funcionar ou, como eu, aprender como desenvolver software para interagir com toda esta infra-estrutura: você pode ter de gerar certificados, armazená-los, excluí-los (o termo correto é revogá-los) e validá-los. No mínimo.

De que tipo de certificados digitais estou falando?

Dos que dependem de autoridades certificadoras (CAs)1. Lembra quando comentei que um certificado não apenas contém informações sobre seu proprietário mas também contém informações sobre a entidade que pode confirmá-lo? Então. Esta entidade é chamada de autoridade certificadora (ou certificate authority ou CA para os íntimos).

Uma CA possui dois propósitos básicos:

  • Gerar os certificados digitais (você não "cria" um certificado - você envia uma requisição para uma CA fazê-lo);
  • Manter uma lista atualizada de certificados gerados por ela que não são mais válidos (a famosa CRL ou certificate revocation list);

E, afinal, o que é um certificado digital?

Um certificado digital é um arquivo. Ele é especialmente formatado (encodado seria um termo melhor) e obedece a um padrão chamado X.509. Atualmente este padrão está na versão 3 e dita que um certificado contenha estas informações:

  • Version / Versão: a versão do formato do certificado;
  • Serial number / Número serial: uma sequência alfanumérica que identifica de forma única o certificado (pelo menos para a CA que o gerou);
  • Algorithm ID / ID do algoritmo: as informações de um certificado não são mantidas em texto simples (o arquivo é criptografado). Este campo indica qual algoritmo criptográfico foi utilizado. Exemplos são: MD5 (em desuso) e SHA-1;
  • Issuer / Emissor: identifica quem é a CA;
  • Validity (Not Before / Not After) / Validade (Não antes de / Não depois de): esta é uma informação crucial num certificado. Todo certificado é válido somente por um intervalo de tempo. Desta forma, um certificado não é valido antes da data inicial e nem tampouco é válido após a data final. Somente durante o período indicado ele é válido, mesmo que ele não tenha sido revogado;
  • Subject / Sujeito ou Indivíduo: é para quem o certificado foi gerado. É o "proprietário" do certificado;
  • Public key info / Informações da chave pública: vou comentar sobre chaves mais adiante;
  • Signature algorithm / Algoritmo da assinatura: cada certificado possui uma assinatura digital criptografada. Este campo indica qual algoritmo criptográfico foi utilizado;
  • Signature / Assinatura: é a assinatura digital criptografada do certificado. É gerada a partir das informações do próprio certificado e é o que impede que as informações do certificado sejam "temperadas" (ou modificadas, se preferir);
  • Tem mais campos, opcionais, mas estes são todos os campos realmente relevantes.

Como um certificado digital é gerado?

Olhando para trás seria melhor ter escrito "emitido" mas como escrevi "gerado" em todo o texto acima vai ficar assim mesmo...

Um certificado digital é gerado em dois passos (de maneira geral): requisição e emissão. Qualquer software que obedeça os protocolos certos pode criar uma requisição para um certificado, contudo, somente uma CA é capaz de emití-lo.

O primeiro passo para a geração de um certificado é gerar sua requisição. Uma requisição, como implica o nome, é um "pedido" enviado para a CA com todas as informações sobre o indivíduo que se deseja gerar o certificado assim como informações sobre a própria requisição. A requisição também é criptografada e esta criptografia deve obedecer a um dos algoritmos criptográficos que a CA consegue lidar. Não adianta nada enviar um requisição criptografada com SHA2-256 se a CA somente lida com SHA1.

A única informação obrigatória sobre um indivíduo é o subject (ou CN ou common name). Common name é a identificação única de um indivíduo (ou recurso ou serviço). Se você já trabalhou com Active Directory ou outro repositório LDAP um exemplo de CN pode ser CN=Eduardo Costa,OU=pakua. Mas um CN é simplesmente a identificação do indivíduo para o qual você está gerando o certificado. Além do CN uma requisição (e posteriormente o certificado) pode armazenar também estas informações:

  • E-mail;
  • Empresa;
  • Departamento;
  • Cidade;
  • País.

Finalmente, é necessário definir um propósito para o certificado digital a ser gerado. Sim, certificados digitais possuem propósitos. Um certificado digital pode ser utilizado para autenticação (o caso clássico, quando ele serve para certificar a identidade do proprietário e permitir o acesso a algum recurso) mas também pode ser utilizado para assinar código-fonte, assinar e-mails, criptografar arquivos e por aí vai.

A partir destas informações a requisição é gerada (e eu vou mostrar como fazer isto via código - aguarde e confie) e enviada para a CA de destino. Quando uma requisição chega até a CA ela pode aceitar a requisição e gerar o certificado ou então aguardar para uma aprovação manual da requisição ou finalmente negá-la.

Caso a requisição seja aceita, por processo automático ou manual, a CA retornará um certificado digital novinho.

Onde os certificados digitais estão sendo utilizados?

Eles são utilizados para certificar conexões SSL (o famoso https dos bancos e comércio eletrônico). Para assinar código-fonte, para assinar executáveis e bibliotecas (você não executa um ActiveX no IE - facilmente - sem assiná-lo com um certificado), para criptografar dados sigilosos, para criptografar conversas e vídeo pela internet, para assinar manifestos ClickOnce e, nas empresas, para certificar funcionários utilizando single-sign-on. Empresas estão baseando o acesso a sistemas e recursos pela validação dos certificados digitais gerados para seus funcionários e colaboradores.

No próximo post...

Eu falei que o assunto era extenso? Pois é. Eu ainda não falei sobre chaves pública-privada, nem sobre PKI, nem sobre PKCS7 / PKCS10 / PKCS12, nem sobre a Microsoft CA, e não mostrei uma única linha de código. Tenha paciência. Estou tentando cobrir o básico para o código fazer sentido lá na frente. Continue comigo e mande ver nos comentários.

Abraços.

1 O outro caso que conheço são as "web of trust". É o mecanismo que faz funcionar o PGP e no qual não há necessidade de CAs centralizadoras para os certificados (é um modelo descentralizado por definição). Esta fora do escopo desta série. Pelo menos por enquanto... :)

5.0 ponto(s). Avaliado por 1 pessoas

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

Segurança Digital | Treinamento e Aprendizado

Comentários

Os comentários estão fechados

Powered by BlogEngine.NET 1.4.5.0
Theme by Mads Kristensen | Modified by Mooglegiant

Eduardo Costa

Desenvolvedor de software, empreendedor, marido e criador de quatro gatos em São Paulo, SP.
Sobre o Mutamblog. Se gostou do conteúdo, assine nosso feed. ;)

Anúncios

Comentários Recentes

Comment RSS