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