43
Ricardo Koji Ushizaki [email protected] http://www.ime.usp.br/~riko Just Java 2007 Outubro/2007 SP

Ricardo Koji Ushizaki [email protected] ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

  • Upload
    lethien

  • View
    228

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Ricardo Koji [email protected]

http://www.ime.usp.br/~rikoJust Java 2007

Outubro/2007 – SP

Page 2: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Agenda1. Certificação Digital e PKI

2. Controle de Acesso

3. Exemplo

4. Conclusão

Page 3: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

1. Certificação Digital

Page 4: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

PKI – Public Key Infrastructure

Page 5: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Certificados ICP-Brasil http://www.icpbrasil.gov.br

Autoridades Certificadoras (ACs) no Brasil devem seguir as normas da ICP-Brasil;

Definem regras e normas para PKI no Brasil;

Definem o CONTEÚDO de cada certificado;

Vantagem:

Aplicações conseguem obter dados de forma mais confiável, como o CPF, CNPJ, data de nascimento etc;

Page 6: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

PC de um e-CPF

“7.1.2.3. Subject Alternative NameA ICP-Brasil define como obrigatória a extensão "Subject Alternative Name", não crítica, e com os seguintesformatos:a) para Certificados de Pessoa Física (e-CPF)a.1) 3 (três) campos otherName, obrigatórios, contendo, nesta ordem:i. OID = 2.16.76.1.3.1 e conteúdo = nas primeiras 8 (oito) posições, a data de nascimento do titular, noformato ddmmaaaa; nas 11 (onze) posições subseqüentes, o Cadastro de Pessoa Física (CPF) do titular;nas 11 (onze) posições subseqüentes, o número de Identificação Social - NIS (PIS, PASEP ou CI); nas15 (quinze) posições subseqüentes, o número do Registro Geral - RG do titular; nas 6 (seis) posiçõessubseqüentes, as siglas do órgão expedidor do RG e respectiva UF.ii. OID = 2.16.76.1.3.6 e conteúdo = nas 12 (doze) posições o número do Cadastro Especifico do INSS(CEI) da pessoa física titular do certificado.iii. OID = 2.16.76.1.3.5 e conteúdo = nas primeiras 12 (onze) posições, o número de inscrição do Título deEleitor; nas 3 (três) posições subseqüentes, a Zona Eleitoral; nas 4 (quatro) posições seguintes, a: Seção;nas 22 (vinte e duas) posições subseqüentes, o município e a UF do Título de Eleitor.”

PC – Política de Certificado

Fonte:

http://publicacao.certificadodigital.com.br/repositorio/pc/politica-srf-a3.pdf

Page 7: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Dados do Certificado Digital

Page 8: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Manipular Certificados Digitais JCE – Java Cryptography Extension

API para Criptografia http://java.sun.com/javase/technologies/security

Page 9: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Comunicação Segura JSSE – Java Secure Socket Extension

Page 10: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

2. Controle de Acesso JCE/JSSE

Page 11: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Definição de Controle de Acesso “Tripple A”

Autenticação

“Quem é”

Autorização

”Pode fazer”

Auditoria

“O que fez”

Fonte: http://www.isc2.org

http://www.guidetocissp.com

Page 12: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Autenticação

Identificação única do usuário

Autenticação baseada em:

O que o usuário sabe (senha, PIN);

O que o usuário possui (crachá, smart card, token);

O que o usuário é (impressão digital, voz, retina, íris);

Onde o usuário está (antes ou depois do firewall).

Page 13: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Autorização

Define o que é ou o que não é permitido;

Permissões;

Analogia a um Sistema Operacional:

Permissão de Leitura, Escrita e Execução.

Page 14: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Auditoria

Registrar operações e atividades realizadas;

Deve associar a ação a um usuário;

Logs, evidências, Assinatura Digital.

Page 15: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

SSL - certificação digital Protocolo SSL (Secure Socket Layer)

Certificado Digital do Servidor

Garante identidade do servidor

Clientes têm certeza que estão acessando o site desejado

Page 16: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Problemas SSL “simples” Apenas um lado (servidor) foi “autenticado”

Falta autenticar o cliente

Webmails, Internet Banking:

Usuário/senha

Autenticação muito fraca

Fraudes eletrônicas

Page 17: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Exemplo do problema

Bob acessa o site de seu banco

Problemas:◦ Bob mal sabe o que é um certificado digital;

◦ E se alguém roubar seu usuário/senha?

Page 18: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Solução: SSL “duplo” SSL com autenticação cliente

Autenticação mais forte:

Cliente sabe algo (PIN)

Cliente possui algo (smart card, token)

Cliente é ele mesmo (certificado digital)

Page 19: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Controle de Acesso com Certificação Digital

Autenticação:

• Autenticar Certificado Digital do Cliente

Autorização:

• Verificar se Cliente possui permissão ao serviço desejado

Auditoria:

• Registrar operação executada: assinatura digital

Page 20: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Exemplo

Cliente possui certificado digital

Autenticação com seu certificado digital

Cliente é autorizado a acessar sistema

Assinar digitalmente cada operação

Page 21: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Como funciona: ServidorDeve confiar na cadeia de certificados do Cliente

Certificado com extensão Server Authentication

Page 22: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Como Funciona: ClienteDeve confiar na cadeia de certificados do Servidor

Certificado com extensão de Client Authentication

Page 23: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Cadeias de Confiança

TLS / SSL handshake – RFC 2246Fonte: http://www.ietf.org/rfc/rfc2246.txt

Page 24: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

3. Configurar SSL no Servidor Possuir um certificado digital para o servidor

Configurar o repositório de certificados confiáveis:

Truststore;

Lista das cadeias que o servidor confia;

Define quais certificados clientes poderão fechar SSL com o servidor.

Habilitar serviço HTTPS com Cliente Authentication

Page 25: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Exemplo: Tomcat Gerar certificado de servidor de testes:keytool -genkey -alias tomcat -keyalg RSA

–sigalg SHA1WithRSA -keystore tomcat.jks

-dname "C=BR, O=TESTE, OU=RIKO, CN=riko-sony“

-validity 365

Criar Truststore com certificados confiáveis:keytool -import -trustcacerts -alias iti

-file certificadoACRaiz.crt

-keystore tomcat-truststore.jks

Page 26: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Exemplo: Tomcat Configurar serviço HTTPS com Client Authentication

Editar o arquivo conf/server.xml

Iniciar o Tomcat

Acessar https://localhost:8443

Usar certificado digital cliente raiz ICP-Brasil

<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true“

maxThreads="150" scheme="https" secure="true“

keystoreFile="D:\riko\java\apache-tomcat6.0.14\conf\tomcat.jks“

keystorePass="tomcat“

truststoreFile="D:\riko\java\apache-tomcat-6.0.14\conf\tomcat-

truststore.jks“ truststorePass="tomcat“ clientAuth="true"

sslProtocol="TLS" />

Page 27: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 28: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 29: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 30: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Aplicação Web Criar controle de acesso baseado no certificado digital

do Cliente;

Arquitetura do Controle de Acesso:

Aplicação Web: Java Servlets + Servlet Filters

Autenticar, autorizar e auditar

Page 31: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 32: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 33: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 34: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o
Page 35: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Autorização Certificado Digital do Cliente:

AKI – Authority Key Identifier

Serial Number

AKI SN

Page 36: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Subject Alternative Name (SAN) Definem o conteúdo de

cada extensão do certificado;

SAN: campos OtherName com dados do dono do certificado (exemplo CPF)

Fonte: http://www.ietf.org/rfc/rfc3280.txt

Page 37: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

SAN - extrair OIDsClasse java.security.cert.X509Certificate

Page 38: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Teste SAN

Page 39: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Teste SAN (cont.)

Page 40: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Debug do programa teste*************************

Valor inteiro=0

0?`L 6 42090119772604011980212488767400000000208682090SSPSP

*************************

Valor inteiro=0

0)

+‚7 [email protected]

*************************

Valor inteiro=1

[email protected]

*************************

Valor inteiro=0

0+`L " 2702790801322590470SAO PAULOSP

*************************

Valor inteiro=0

0`L 219051737000

Page 41: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Limitações no JCE Manipular extensões do X.509 Certificate;

Soluções:

Uso de APIs de criptografia (Bouncy Castle);

JCP (Java Community Process).

Page 42: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

4. Conclusão Controle de Acesso com Certificado Digital Cliente

Autenticação mais forte

Certificação Digital não é trivial

Limitações JCE

Page 43: Ricardo Koji Ushizaki riko@serasa.com.br ...riko/java/riko-justjava2007-controle... · Como funciona: Servidor ... Configurar SSL no Servidor Possuir um certificado digital para o

Referências ICP-Brasil:

http://www.icpbrasil.gov.br

CISSP (Certified Information Systems Security Professional): http://www.isc2.org

http://www.guidetocissp.com

Java Security: http://java.sun.com/javase/technologies/security

RFC2246 – TLS handshake:

http://www.ietf.org/rfc/rfc2246.txt

RFC3280 – X.509 e PKI:

http://www.ietf.org/rfc/rfc3280.txt

BouncyCastle:

http://www.bouncycastle.org

JCP – Java Community Process:

http://www.jcp.org

Material da palestra em: http://www.ime.usp.br/~riko

OBRIGADO!