O que é um Certificado Digital
Uma chave pública, assim como documentos impressos, deve ter elementos agregados que permitam o reconhecimento de sua legitimidade, pois a chave pública é o meio que permite a terceiros o reconhecimento de uma assinatura digital. Se uma chave pública não puder ter a sua propriedade estabelecida, ou seja, não pudermos comprovar a vinculação entre a chave e a pessoa que alega possui-la, podemos concluir que as assinaturas digitais verificadas por essa chave pública pode não ter validade alguma.
Apenas a chave pública garante a individualidade, mas não a identidade do seu proprietário. Dessa forma, se um usuário recebe a chave pública e passa a utilizá-la para lhe enviar mensagens cifradas, o usuário está certo de estar tratando sempre com a mesma pessoa, organização ou computador, mas não consegue garantias sobre a identificação real desta que ele está tratando.
Portanto, essa situação demonstra que a chave pública não resolve questões cruciais. Uma solução para isso seria a publicação de todas as chaves públicas em listagens com os nomes e outros dados dos seus proprietários, como uma lista telefônica. Assim, poderíamos procurar pelo nome da pessoa e achar a sua chave pública, mas infelizmente não há um modo efetivo para garantir que a chave publicada pertence realmente a pessoa que se apresenta como proprietária.
A solução adotada para solucionar essa lacuna é composta por um sistema um pouco mais complexo que vincula dados unívocos do proprietário com a sua chave pública. Além disso, essa vinculação deveria ser inequívoca e à prova de adulteração, utilizando assinatura digital.
No restante do artigo veremos mais sobre certificado digital e posteriormente faremos um exemplo prático de como podemos gerar um certificado digital.
Certificado Digital
Um Certificado digital, também conhecido como certificado de chave pública ou certificado de identidade é um documento eletrônico que reúne uma chave pública e os dados de identificação do proprietário. Esse documento é assinado digitalmente, o que garante a integridade e a coesão dos dados nele contidos.
Apesar de existirem modelos distintos, basicamente um certificado digital contém como componentes uma chave pública, o nome do proprietário, endereço eletrônico do proprietário, data de criação do certificado, data de validade do certificado, número serial único do certificado e assinatura digital sobre o conjunto dos campos anteriores. Assim sendo, um certificado digital é um conjunto formado por chave pública, dados de identificação do proprietário e uma assinatura digital de outra fonte, que deve ser creditada como confiável. Essa solução de uma assinatura digital de terceiros é como uma autorização dada por uma autoridade com fé pública a documentos oficiais ou ao contrato assinado por uma ou mais testemunhas. Com isso, um certificado assinado por um terceiro confiável tem prerrogativa de credibilidade.
X.509
O X.500 foi a primeira versão da série aprovada pelo Setor de Padronização de Telecomunicações da União Internacional de Telecomunicações (ITU-T) no ano de 1988. O X.500 é um conjunto de padrões para redes de computadores que tratam sobre serviços de diretório, entre eles está a definição do DAP (Directory Acess Protocol) que é a base para o LDAP e diversos outros serviços de diretórios. Um padrão da série X.500 é o X.509 que trata sobre certificados de chave pública e, devido à sua grande importância acabou até mesmo extrapolando o escopo da série.
O X.509 está na versão 3 que foi publicada em 1996 em uma colaboração entre a ISO/IEC, ITU-T e ANSI. Uma característica fundamental deste certificado é a existência de um emissor, o que significa que além dos dados de identificação do titular, tem também a identificação de quem emitiu o certificado e, portanto, de quem certifica a validade dos dados. Alguns certificados também são capazes de serem usados para emitir outros certificados.
Entre os campos do certificado temos a versão do X.509, o número serial que é o identificador do certificado no escopo do emissor, o algoritmo de assinatura, a identificação do emissor, a validade do certificado, a entidade, chave pública, entre outros.
Se um certificado digital X.509 deve ter explicitamente um emissor, este deve servir para atestar a veracidade do certificado por ele emitido. Dessa forma, se o emissor fosse alguma pessoa ou entidade desconhecida, a assinatura no certificado não ofereceria nenhuma garantia e poderia ser desconsiderada. Por isso que o padrão X.509 estabelece que a emissão de certificados digitais aos usuários finais deve ser realizada por uma entidade confiável como uma Autoridade Certificadora (ou Autoridade de Certificação - AC).
As Autoridades Certificadoras devem controlar todo o ciclo de vida dos certificados que ela emite prezando pelo sigilo da própria chave privada usada na assinatura. Por isso que uma AC tem uma estrutura bastante robusta, com mecanismos de auditoria, tolerância a falhas, segurança com salas-cofre e documentação de procedimentos e eventos.
No entanto, as atividades mais burocráticas de recolhimento e conferência da documentação dos usuários não faz parte do escopo de uma AC restando isso para as AR (Autoridade de Registro) que funciona como uma subsidiária operacional da AC.
Para mais informações sobre como funciona a cadeia de certificação no Brasil e a ICP veja mais informações sobre o artigo de certificação digital publicada no portal DevMedia.
Na próxima seção veremos na prática como podemos gerar um certificado digital próprio, fazendo a nossa própria cadeia de certificação.
Cadeia de Certificação e ICP
Conforme vimos anteriormente alguns certificados podem assinar outros certificados, essa característica é especialmente útil para as ACs quando se quer ter um nível intermediário entre si e os usuários finais, muito em função da complexidade do cenário. Assim, as ACs podem ter ACs subsidiárias que possuem seus certificados assinados pelo certificado da AC principal. Os certificados dos usuários finais são assinados pelas ACs subsidiárias.
Esse tipo de estrutura pode ter um elevado número de níveis e de ramificações em cada nível, tornando a hierarquia bastante complexa. Porém, na prática temos três a quatro níveis para a maioria das aplicações. Nessa estrutura em árvore temos também o conceito de delegação postergada de confiança, onde a AC emite o certificado de um usuário final atestando a sua autenticidade, e quem atesta a autenticidade do certificado dessa AC, além da confiabilidade das suas práticas, é AC de nível superior. Dessa forma, a cada nível que subimos na árvore, a confiança é creditada para a AC que assina os certificados daquele nível. Esse processo de confiança vai até a AC Raiz que está no topo da árvore e o seu certificado é auto assinado, ou seja, ela é considerada como possuidora de confiança absoluta para seus devidos fins, de forma que nenhuma outra atividade assina o seu certificado.
Uma infraestrutura de Chaves Públicas (ICP, do inglês Public Key Infrastructure - PKI) é todo o conjunto formado pela comunidade de usuários finais, AC Raiz e ACs intermediárias. Além disso, também engloba normas e procedimentos regradores desse conjunto, e as estruturas físicas e lógicas que dão o suporte necessário ao funcionamento de todo o sistema. Uma ICP pode ter âmbito organizacional, acadêmico, nacional, entre outros.
No ano de 2001 o governo federal do Brasil instituiu a ICP Brasil (Infra-Estrutura de Chaves Públicas Brasileira). Essa norma especificou as bases para a criação das estruturas e das organizações que dão suporte a essa ICP. Entre algumas das definições o Instituto Nacional de Tecnologia da Informação (ITI) foi transformado em autarquia e passou a desempenhar a função de Autoridade Certificadora Raiz, e foi criado um Comitê Gestor, que é responsável pela definição de políticas e fiscalização da AC Raiz. Entre as atribuições do comitê estão: adotar medidas necessárias e a coordenação da implantação e do funcionamento da ICP-Brasil, estabelecer a política, critérios e normas técnicas para o credenciamento das ACs, ARs e demais prestadores de serviço de suporte à ICP-Brasil. Outras atribuições incluem o ajuste e revisão de procedimentos e práticas da ICP-Brasil para garantir a compatibilidade e atualização tecnológica do sistema e conformidade com as políticas de segurança.
O papel da ITI, o AC Raiz, é de executor das normas aprovadas pelo comitê, assim como emitir, expedir, distribuir, revogar e gerenciar os certificados das AC de nível imediatamente subsequente. Também cabe a AC Raiz fiscalizar e auditar as ACs e ARs que fazem parte da ICP.
Gerando um Certificado Digital Próprio
Gerar um certificado e inclusive nos tornarmos a nossa própria Autoridade Certificadora é simples como veremos nessa sessão, basta utilizarmos as ferramentas corretas como a OpenSSL.
Para isso devemos primeiramente baixá-la em http://www.slproweb.com/products/Win32OpenSSL.html. Se quisermos baixar para Linux devemos baixá-lo no site www.openssl.org.
A Figura 1 mostra a página de download para plataforma Windows do OpenSSL. Escolha a primeira opção “Win32 OpenSSL v1.0.1i Light”.
Após o download e a instalação do OpenSSL devemos ir até o diretório de instalação do OpenSSL em “C:\OpenSSL-Win32\bin” e executar o aplicativo openssl.exe. Não devemos esquecer de executá-lo como administrador, para isso basta clicar com o botão direito do mouse em cima do ícone do prompt e clicar em “Executar como administrador”.
Segue na Figura 2 o prompt de comando do OpenSSL aberto.
Aberto o aplicativo do OpenSSL podemos começar gerando um certificado auto assinado (o de uma Autoridade Certificadora) através do comando:
genrsa -des3 -out ca.key 4096
Este comando gera uma chave rsa de 4096 bits, armazena a chave no arquivo ca.key e protege este arquivo cifrando-o com o 3DES.
Após executar o comando a tela da Figura 3 será exibida, esta tela mostra o comando sendo processado.
Após o processamento ser realizado o openSSL solicitará a digitação da phrase que irá cifrar esta chave. Não podemos nos esquecer de memorizar a phase. Para fins de exemplo digitamos “testphrase”. Segue a Figura 4, onde mostra a solicitação da phrase.
Após isso será solicitado para confirmar a phrase digitada anteriormente, apenas devemos colocar a mesma phrase conforme digitado anteriormente.
Na Figura 5 podemos observar a criação do arquivo ca.key no diretório.
Figura 5. Arquivo ca.key criado no diretório.
Após isso devemos gerar um certificado x509 que será válido por 10 anos (3650 dias) que conterá a chave pública do arquivo ca.key e será armazenado no arquivo ca.crt. Após executarmos o comando será necessário entrarmos com várias informações que farão parte do certificado. Portanto, basta executarmos o comando abaixo:
req -new -x509 -days 3650 -key ca.key -out ca.crt
Após executar o comando podemos verificar a solicitação da phrase conforme já digitado anteriormente. Segue a Figura 6 que mostra a solicitação da phrase.
Digitando corretamente o comando o OpenSSL será solicitado para digitarmos o “Country Name” que deverá conter duas letras. No nosso caso digitamos BR de Brasil conforme mostra a Figura 8.
Após isso será solicitado o “State”. No nosso exemplo digitamos “Rio Grande do Sul” conforme mostra a Figura 9.
Agora será solicitada a “City”. No nosso exemplo de certificado colocamos “Porto Alegre” conforme mostra a Figura 10.
Agora será solicitado a “Organization Name”. No nosso exemplo colocaremos “Devmedia Organization” conforme mostra a Figura 11.
A próxima solicitação é para digitarmos a “Organizational Unit Name”. No nosso exemplo colocaremos “Devmedia Certification” conforme mostra a Figura 12.
Após isso será solicitado o “Common Name”. No nosso exemplo colocaremos um nome próprio “Higor Medeiros” conforme mostra a Figura 13.
Agora será solicitado o “Email Address”. No nosso exemplo colocaremos o e-mail próprio higor@devmediacertification.com, conforme mostra a Figura 14.
Podemos verificar a criação do certificado “ca.crt” no diretório conforme mostra a Figura 15.
Clicando duas vezes no certificado podemos verificar diversas informações como: para quem e por quem o certificado foi emitido, a validade do certificado, o seu algoritmo de assinatura, sua versão, algoritmo de identificação, chave pública, entre outras informações. AsFiguras 16 a 18 mostram o certificado criado e cada uma das suas abas.
Após gerarmos o certificado raiz podemos gerar um certificado de um servidor. Para isso devemos executar o comando abaixo:
genrsa -des3 -out server.key 4096
Este comando gera uma chave rsa para o servidor (server.key). A Figura 19 mostra o processamento do comando.
Após isso será solicitado a pass phrase, nesse caso digitaremos “testphrase” conforme mostra a Figura 20.
Após isso devemos confirmar a pass phrase digitando a mesma pass phrase digitada anteriormente.
Na Figura 21 podemos observar a criação do arquivo server.key no diretório.
A seguir faremos uma requisição de certificado (server.csr) com o comando abaixo:
req -new -key server.key -out server.csr
Após executar o comando acima teremos uma série de solicitações para que possamos cria-lo. Porém primeiramente devemos inserir o pass phrase digitado anteriormente conforme mostra a Figura 22.
Digitando corretamente o comando o OpenSSL será solicitado para digitarmos o “Country Name” que deverá conter duas letras. No nosso caso digitamos BR de Brasil conforme mostra a Figura 23.
Após isso será solicitado o “State”. No nosso exemplo digitamos “Rio Grande do Sul” conforme mostra a Figura 24.
Agora será solicitada a “City”. No nosso exemplo de certificado colocamos “Porto Alegre” conforme mostra a Figura 25.
Agora será solicitado a “Organization Name”. No nosso exemplo colocaremos “Devmedia Organization” conforme mostra a Figura 26.
A próxima solicitação é para digitarmos a “Organizational Unit Name”. No nosso exemplo colocaremos “Devmedia Certification” conforme mostra Figura 27.
Após isso será solicitado o “Common Name”. No nosso exemplo colocaremos um nome próprio “Higor Medeiros” conforme mostra a Figura 28.
Agora será solicitado o “Email Address”. No nosso exemplo colocaremos o e-mail próprio higor@devmediacertification.com conforme mostra a Figura 29.
Podemos verificar a criação do certificado “ca.crt” no diretório conforme mostra a Figura 30.
Feito isso devemos assinar o certificado com o certificado raiz. Para isso devemos utilizar o comando abaixo:
x509 -req -days 365 -in server.csr -CA ca.crt -CAkey ca.key -set_serial 10102014 -out server.crt
Após a execução do comando serão apresentadas algumas informações e a solicitação do pass phrase novamente, conforme mostra a Figura 31.
Este comando assina a requisição server.csr com o certificado ca.crt e gera um certificado server.crt. Uma diferença é que este certificado tem validade de um ano (365 dias) e um número série igual a 10102014.
Após todos esses passos realizados já temos um certificado digital raiz (ca.crt) e um certificado para o servidor (server.crt) que foi assinado pela nossa própria autoridade certificadora. Para usá-los também precisaremos das chaves ca.key e server.key.
Referências:
[1] STALLINGS, William. Criptografia e segurança de redes: Princípios e práticas, 4 ed. São Paulo: Prentice Hall, 2008.
[2] Certsign, disponível em http://www.certisign.com.br/certificado-digital
[3] Certificado Digital - ITI. Disponível em http://www.iti.gov.br/certificacao-digital/certificado-digital
Links Úteis
- ICP-Brasil:
A Infraestrutura de Chaves Públicas Brasileira – ICP-Brasil é uma cadeia hierárquica de confiança que viabiliza a emissão de certificados digitais para identificação virtual do cidadão. - Instituto Nacional de Tecnologia da Informação:
Site oficial do instituto de tecnologia do Brasil - Certificado Digital:
Na prática, o certificado digital ICP-Brasil funciona como uma identidade virtual que permite a identificação segura e inequívoca do autor de uma mensagem ou transação feita em meios eletrônicos, como a web.
Saiba mais sobre Assinaturas Digitais
- Ciclo de vida de uma Certificação Digital em .NET
Neste artigo trataremos do Ciclo de Vida de um Certificado Digital, seus principais usos e exemplos de assinatura digital e criptografia com um Certificado de Cliente.
- Autenticação de Usuários com Certificados Digitais
Atualmente todos estão preocupados com a segurança e autenticidade de documentos e relacionamentos eletrônicos...
- O que é Certificado Digital? Os certificados digitais já são uma realidade obrigatória no Brasil, principalmente para aqueles que lidam com softwares de automação comercial.
Confira outros conteúdos:
Programação x Concurso Público
Osvaldo aprendeu programação
DevMedia x Netflix: Onde investir meu...
Black November
Desconto exclusivo para as primeiras 200 matrículas!
Pagamento anual
12x no cartão
De: R$ 69,00
Por: R$ 54,90
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- 12 meses de acesso
Pagamento recorrente
Cobrado mensalmente no cartão
De: R$ 79,00
Por: R$ 54,90 /mês
Total: R$ 658,80
Garanta o desconto
- Formação FullStack Completa
- Carreira Front-end I e II, Algoritmo e Javascript, Back-end e Mobile
- +10.000 exercícios gamificados
- +50 projetos reais
- Comunidade com + 200 mil alunos
- Estude pelo Aplicativo (Android e iOS)
- Suporte online
- Fidelidade de 12 meses
- Não compromete o limite do seu cartão
<Perguntas frequentes>
Nossos casos de sucesso
Eu sabia pouquíssimas coisas de programação antes de começar a estudar com vocês, fui me especializando em várias áreas e ferramentas que tinham na plataforma, e com essa bagagem consegui um estágio logo no início do meu primeiro período na faculdade.
Estudo aqui na Dev desde o meio do ano passado!
Nesse período a Dev me ajudou a crescer muito aqui no trampo.
Fui o primeiro desenvolvedor contratado pela minha
empresa. Hoje eu lidero um time de desenvolvimento!
Minha meta é continuar estudando e praticando para ser um
Full-Stack Dev!
Economizei 3 meses para assinar a plataforma e sendo sincero valeu muito a pena, pois a plataforma é bem intuitiva e muuuuito didática a metodologia de ensino. Sinto que estou EVOLUINDO a cada dia. Muito obrigado!
Nossa! Plataforma maravilhosa. To amando o curso de desenvolvimento front-end, tinha coisas que eu ainda não tinha visto. A didática é do jeito que qualquer pessoa consegue aprender. Sério, to apaixonado, adorando demais.
Adquiri o curso de vocês e logo percebi que são os melhores do Brasil. É um passo a passo incrível. Só não aprende quem não quer. Foi o melhor investimento da minha vida!
Foi um dos melhores investimentos que já fiz na vida e tenho aprendido bastante com a plataforma. Vocês estão fazendo parte da minha jornada nesse mundo da programação, irei assinar meu contrato como programador graças a plataforma.
Wanderson Oliveira
Comprei a assinatura tem uma semana, aprendi mais do que 4 meses estudando outros cursos. Exercícios práticos que não tem como não aprender, estão de parabéns!
Obrigado DevMedia, nunca presenciei uma plataforma de ensino tão presente na vida acadêmica de seus alunos, parabéns!
Eduardo Dorneles
Aprendi React na plataforma da DevMedia há cerca de 1 ano e meio... Hoje estou há 1 ano empregado trabalhando 100% com React!
Adauto Junior
Já fiz alguns cursos na área e nenhum é tão bom quanto o de vocês. Estou aprendendo muito, muito obrigado por existirem. Estão de parabéns... Espero um dia conseguir um emprego na área.
Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.