Desenvolvimento Web com
Framework Demoiselle
versão 1.0
Módulo 08: Segurança – Certificados Digitais
Autor:
Emerson Sachio Saito
Serpro / Coordenação
Estratégica de Tecnologia /
Curitiba
www.frameworkdemoiselle.org.br
atualizado em: 08/07/2009
Licença
Esta obra está licenciada sob uma
Licença Creative Commons
http://creativecommons.org/licenses/by/2.5/br/
Módulo 06 - Segurança
3
Ficha Técnica
Tutorial Framework Demoiselle

Autor
Emerson Sachio Saito
Serpro / Coordenação Estratégica de Tecnologia –
Regional Curitiba (CTCTA)

Revisores
Módulo 06 - Segurança
4
Agenda
Agenda

Certificação Digital ICP-BRASIL (introdução)

Componente – Demoiselle Security

Configuração e Implementação
Módulo 06 - Segurança
5
Demoiselle Security
Certificação Digital ICP-BRASIL


Criada a partir da Medida Provisória 2.200-2, de
24.10.2001, é um conjunto de AC's ordenadas em
conformidade com as diretrizes e normas
técnicas estabelecidas por um Comitê Gestor.
Somente as transações realizadas com processo
de certificados emitidos por certificação,
envolvendo autoridades credenciadas na ICPBrasil, presumem-se verdadeiras em relação aos
signatários, dando validade jurídica aos
documentos assinados digitalmente e aos
processos realizados.
Módulo 06 - Segurança
6
Demoiselle Security
Certificação Digital ICP-BRASIL




A entidade responsável no Brasil é o ITI
(http://www.iti.gov.br/)
Define as normas técnicas a serem adotadas
(algoritmos, padrões, etc)
Realiza homologação de equipamentos e
software.
Juridicamente, no Brasil, tanto o usuário
quanto a aplicação deverão utilizar somente
certificados
emitidos
por
Autoridade
Credenciada junto à ICP-BRASIL
Módulo 06 - Segurança
7
Demoiselle Security
Tipos de Certificados ICP-Brasil
ASSINATURA:
SIGILO:
A1
S1
S2
A2
S3
A3
A4
S4
Nível de segurança
• A1 e S1  Chave 1024 bits gerada por software para 1 ano
• A2 e S2  Chave 1024 bits gerada por hardware para 2 anos
• A3 e S3  Chave 1024 bits gerada por hardware para 3 anos • A4 e S4  Chave 2048 bits gerada por hardware para 3 anos
Módulo 06 - Segurança
8
Demoiselle Security
Tipos de Certificados ICP-Brasil



e-CPF, Identidade Digital, CertJUS, etc: São nomes
comerciais, geralmente são: A1 e A3(Token/SmartCard) e
usados para identificar Pessoa Física.
e-CPF Simples é destinado exclusivamente ao responsável
titular de Microempresa (ME) e Empresa de Pequeno Porte
(EPP), optantes ou não do SIMPLES NACIONAL.
Tecnicamente, todos tem o mesmo efeito prático.
Módulo 06 - Segurança
9
Demoiselle Security
Tipos de Certificados ICP-Brasil


e-CNPJ, CertJUS Empresarial, etc: Também nomes
comerciais, geralmente são: A1 e A3(Token/SmartCard) e
usados para identificar Pessoa Jurídica.
Certificados de Servidor/Equipamento/Aplicação: São os
certificados do tipo S1(mais comum), S2, S3, S4 (HSM),
usados para identificar um Equipamento (IP, URL), ou uma
Aplicação/Serviço (URL/Nome da Aplicação)
Módulo 06 - Segurança
10
Demoiselle Security
Componente Demoiselle Security


Tem como objetivo facilitar a manipulação e o
uso de Certificados Digitais no padrão ICPBRASIL.
Implementado através de security-provider.
Módulo 06 - Segurança
11
Demoiselle Security
Componente Demoiselle Security

DefaultExtension

São os atributos
extensions:
definidos
pelo
padrão

BEFORE_DATE: Data final da validade do Certificado.

AFTER_DATE: Data de inicio da validade do Certificado.


X509v3
CERTIFICATION_AUTHORITY: Valor lógico(booleano), se verdadeiro(true)
significa que o certificado é de Autoridade Certificadora.
CRL_URL: Lista(s) com o(s) endereço(s) onde se encontram os arquivos
de Revogação.

SERIAL_NUMBER: String com o valor do número serial do Certificado.

ISSUER_DN: Nome do emissor (autoridade) que emitiu o certificado.
Módulo 06 - Segurança
12
Demoiselle Security
Componente Demoiselle Security

DefaultExtension






São os atributos
extensions:
definidos
pelo
padrão
X509v3
SUBJECT_DN: Nome do Titular do certificado.
KEY_USAGE: Usos do Certificado (ex: digitalSignature, nonRepudiation,
keyEncipherment, dataEncipherment).
PATH_LENGTH: Não é utilizado pela ICP-BRASIL (0 ou -1)
AUTHORITY_KEY_IDENTIFIER: Valor em Hexadecimal da chave de
identificação da Autoridade emissora.
SUBJECT_KEY_IDENTIFIER: Valor em Hexadecimal da chave de
identificação do Titular do Certificador.
Módulo 06 - Segurança
13
Demoiselle Security
Componente Demoiselle Security

ICPBrasilExtension





São os atributos definidos como obrigatórios pela ICPBRASIL:
CPF: String de 11 posições contendo o número do CPF do Titular de
Certificado de Pessoa Física, ou o CPF do Responsável por Certificado de
Pessoa Jurídica ou de Equipamento/Aplicação.
CNPJ: String de 14 posições contendo o número do CNPJ do Titular de
Certificado de Pessoa Jurídica ou de Equipamento/Aplicação.
CEI: String de 12 posições com o número do Cadastro Específico do INSS
(CEI) do titular de Certificado de Pessoa Física ou Jurídica.
NIS: String de 11 posições contendo o Número de Identificação Social (PIS,
PASEP ou CI).
Módulo 06 - Segurança
14
Demoiselle Security
Componente Demoiselle Security

ICPBrasilExtension





São os atributos definidos como obrigatórios pela ICPBRASIL:
NOME: Nome de identificação do Certificado (CN) para Certificado de
Pessoa Física, Jurídica ou de Equipamento/Aplicação.
NOME_RESPONSAVEL_PESSOA_JURIDICA: Nome do Responsável por
Certificado de Pessoa Jurídica ou de Equipamento/Aplicação.
EMAIL: Endereço de e-mail do Titular de Certificade de Pessoa Física ou
Responsável
por
Certificado
de
Pessoa
Jurídica
ou
de
Equipamento/Aplicação.
DATA_NASCIMENTO: String no formato DDMMYYYY contendo a Data de
Nascimento do Titular de Certificado de Pessoa Física ou Responsável por
Certificado de Pessoa Jurídica ou de Equipamento/Aplicação.
Módulo 06 - Segurança
15
Demoiselle Security
Componente Demoiselle Security

ICPBrasilExtension




São os atributos definidos como obrigatórios pela ICPBRASIL:
NUMERO_IDENTIDADE: String de no máximo 15 posições contendo o
Número do RG (Registro Geral) do Titular de Certificado de Pessoa Física
ou Responsável por Certificado de Pessoa Jurídica ou de
Equipamento/Aplicação.
ORGAO_EXPEDIDOR_IDENTIDADE: String de no máximo 4 posições
contendo a sigla do Orgão emissor do RG (Registro Geral) do Titular de
Certificado de Pessoa Física ou Responsável por Certificado de Pessoa
Jurídica ou de Equipamento/Aplicação.
UF_ORGAO_EXPEDIDOR_IDENTIDADE: String de 2 posições contendo a
UF(Unidade da Federação) do Orgão emissor do RG (Registro Geral) do
Titular de Certificado de Pessoa Física ou Responsável por Certificado de
Pessoa Jurídica ou de Equipamento/Aplicação.
Módulo 06 - Segurança
16
Demoiselle Security
Componente Demoiselle Security

ICPBrasilExtension





São os atributos definidos como obrigatórios pela ICPBRASIL:
NUMERO_TITULO_ELEITOR: String de 12 posições contendo o Número
do Titulo de Eleitor do Titular de Certificado de Pessoa Física.
ZONA_TITULO_ELEITOR: String de 3 posições contendo o Número da
Zona Eleitoral do Titulo de Eleitor do Titular de Certificado de Pessoa
Física.
SECAO_TITULO_ELEITOR: String de 4 posições contendo o Número da
Seção Eleitorral do Titulo de Eleitor do Titular de Certificado de Pessoa
Física.
MUNICIPIO_TITULO_ELEITOR: String de no máximo 20 posições
contendo o nome do Município/Domicilio Eleitoral do Titulo de Eleitor do
Titular de Certificado de Pessoa Física.
Módulo 06 - Segurança
17
Demoiselle Security
Componente Demoiselle Security

ICPBrasilExtension





São os atributos definidos como obrigatórios pela ICPBRASIL:
UF_TITULO_ELEITOR: String de 2 posições contendo a UF (Unidade da
Federação) à qual pertence o Município/Domicilio Eleitoral do Titulo de
Eleitor do Titular de Certificado de Pessoa Física.
NOME_EMPRESARIAL: Nome empresarial constante do CNPJ, para
Certificado de Equipamento/Aplicação, se o titular for uma pessoa jurídica.
TIPO_CERTIFICADO: String contendo: PF=Certificado de Pessoa Física,
PJ=Certificado de Pessoa Jurídica, EA=Certificado de Equipamento ou
Aplicação.
NIVEL_CERTIFICADO:Nível do Certificado: A1, A2, A3, A4, S1, S2, S3, S4.
Módulo 06 - Segurança
18
Demoiselle Security
Componente Demoiselle Security

CertificateManager

Permite manipular objetos de certificado X.509 para
extrair informações e validar seu conteúdo. Para
trabalhar com o CertificateManager basta instanciá-lo
passando o objeto X.509 no construtor. Se não for
informado dois validadores serão carregados
CRLValidator e PeriodValidator.

CertificateManager cm = new CertificateManager(x509);
Módulo 06 - Segurança
19
Demoiselle Security
Componente Demoiselle Security

CertificateManager

É possível desativar o carregamento dos validadores
mudando a instrução para:


CertificateManager cm = new CertificateManager(x509, false);
Caso seja necessário implementar os próprios
validadores de certificado basta mudar a instrução para:



CertificateManager cm = new CertificateManager(x509,
validator1, validator2, validatorN); // com validador padrão
Ou
CertificateManager cm = new CertificateManager(x509, false,
validator1, validator2, validatorN);
Módulo 06 - Segurança
20
Demoiselle Security
Componente Demoiselle Security

IValidator

Um validador é uma implementação da interface
IValidator e deve validar um certificado a partir de um
objeto X.509. Abaixo segue um exemplo de validador.
public class SampleValidator implements IValidator {
public void validate(X509Certificate x509) throws
CertificateValidatorException {
if (!valid) {
throw new CertificateValidatorException("Certificate not valid");
}
}
}
Módulo 06 - Segurança
21
Demoiselle Security
Componente Demoiselle Security

CRLValidator

O CRLValidator verifica se o certificado está na lista de
certificados revogados da autoridade certificadora. A
implementação do CRLValidator não realiza download
do arquivo de crl, ao invés disso ele apenas utiliza um
diretório onde ele mantem uma lista de crl em um
arquivo de índice. Outro mecanismo deve ler o arquivo
de índice e manter os arquivos de crl atualizados. O
diretório e o nome do arquivo de índice deve ser
configurado através das chaves:

demoiselle.component.security.certificate.crl.path

demoiselle.component.security.certificate.crl.index
Módulo 06 - Segurança
22
Demoiselle Security
Componente Demoiselle Security

PeriodValidator

O PeriodValidator verifica se o certificado está dentro do
período de validade (AFTER_DATE, BEFORE_DATE)
que foi especificado.
Módulo 06 - Segurança
23
Demoiselle Security
Configuração e Implementação


Extração de Informações
Para extrair informações basta criar uma classe
com os atributos que se deseja preencher com
informações do certificado X.509. Cada atributo
deve ser anotado com o seu OIDExtension
(DefaultExtension ou ICPBrasilExtension). Para
executar a carga das informações basta passar a
classe/objeto para o CertificateManager.
Módulo 06 - Segurança
24
Demoiselle Security
Configuração e Implementação

Extração de Informações
class Cert {
@ICPBrasilExtension(type=ICPBrasilExtensionType.NOME)
private String nome;
@DefaultExtension(type=DefaultExtensionType.CRL_URL)
private List<String> crlURL;
public String getNome() { return nome; }
public String getCrlURL() { return crlURL; }
}
CertificateManager cm = new CertificateManager(x509);
Cert cert = cm.load(Cert.class);
Módulo 06 - Segurança
25
Demoiselle Security
Configuração e Implementação

JBOSS - server.xml


Localizado em:
<jboss_home>/server/default/deploy/jbossweb.deployer/server.xml
Necessário habilitar (descomentar) a tag da porta 8443.


clienteAuth=”true”.
keystoreFile e trustoreFile.
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
maxThreads="150" scheme="https" secure="true"
clientAuth="true" sslProtocol="TLS"
keystoreFile="${jboss.server.home.dir}/conf/keystore_localhost.jks"
keystorePass="teste1"
truststoreFile="${jboss.server.home.dir}/conf/localhost_truststore.jks"
truststorePass="teste1" />
Módulo 06 - Segurança
26
Demoiselle Security
Configuração e Implementação

JBOSS - login-config.xml


Localizado em: <jboss_home>/server/default/conf/loginconfig.xml
Mudar as configurações de credential-type e certificatecallback-adapter-class.
<module-option name="credential-type">certificate</module-option>
<module-option name="certificate-callback-adapter-class">
br.gov.component.demoiselle.security.auth.adapter.JBossCertificateCallbackAdapter
</module-option>
Módulo 06 - Segurança
27
Laboratório
Laboratório 08

Exercício 8

Objetivos
 Configuração do Jboss
 Manipulação de certificados digitais com o
componente demoiselle-security
 Login/Autenticação com Certificado Digital
Módulo 06 - Segurança
28
Contato
Tutorial Framework Demoiselle

Comunidade Demoiselle


http://www.sourceforge.net/projects/demoiselle
Colaborações

Lista [email protected]
Módulo 06 - Segurança
29
Download

BRASIL.