Client-cert

To tentando fazer aqui em casa a autenticação client-cert
gerei um certificado x509 que está dentro da minha pasta home.
alterei o tomcat-users e o web.xml conforme tem que ser, e alterei o arquivo server.xml habilitando o HTTPS para a porta 8443.
oq falta eu fazer? ou oq eu posso estar fazendo errado, a mensagem que recebo é HTTP Status 400 - No client certificate chain in this request
description The request sent by the client was syntactically incorrect (No client certificate chain in this request).

Se vc configurou o tomcat para, no ssl, exigir o certificado do cliente (concordo que autenticar via client-cert sans client cert é interessante) - o cliente (browser, por exemplo) deve enviar um certificado de uma CA confiável (ou seja, que o trust manager goste) ou uma chain que contenha ao menos uma CA confiável.
Olhe:
http://emo.sourceforge.net/cert-login-howto.html
http://www.vorburger.ch/blog1/2006/08/setting-up-two-way-mutual-ssl-with.html
http://www.oreilly.com/catalog/tomcat/chapter/ch06.pdf

Em especial as partes sobre a configuração do cliente.
Ps- client-cert funciona, mas lembre-se a maioria das implementações (que eu conheça) NÃO olha crl, ocsp, etc…

Estudei pelo oq eu vi, eu preciso importar no browser o certificado do cliente, ceritificado pessoal dele…
e a extensão desse certificado é PKCS12 ou .p12, mas nao sei como gerar ele.
alguem sabe?

irmão, alguns conceitos (simplificados) antes:

certificado: no contexto de PKI, 90% das vezes significa um X.509v3. Este tipo de certificado é basicamente um record/struct que tem os dados pessoais do “dono” (subject) + chave pública do subject + dados de quem emitiu (issuer, uma CA normalmente) mais a assinatura digital do emissor. É esta assinatura que dá a garantia para quem recebe o mesmo (tb conhecido como ter fé :slight_smile: ). O objetivo final é fazer um bind seguro entre os dados e a chave pública do subject.

chave privada (priv key): é o par da chave pública. É esta que vc vende o seu primogênito mas não entrega a chave. O que vc “faz” com uma vc só “desfaz” com a outra, por exemplo “assinar” é usar esta, pq qualquer uma com a pub key confere, da mesma forma se algúem quiser mandar algo p/ que só vc veja, ele usaria a pub key pq apenas vc com a priv conseguiria olhar.

PKCS12 (p12) - é uma estrutura que funciona como se fosse uma “carteira digital”, nela vc tem a sua priv key, o seu certificado e o da sua CA (usualmente numa chain). Em termos java é um keystore com uma key entry e várias certificate entries. Não é um “certificado” :slight_smile:

Para criar, exitem várias ferramentas que geram ou convertem de <-> para keystore. Tem uma app. maneirinha da IBM chamada Key Manager (Keyman) que é molezinha de usar (http://www.alphaworks.ibm.com/tech/keyman)
Mas claro, sempre tem a openssl e o keytool… mas provavelmente a a sua fé na humanidade seria abalada (http://mark.foster.cc/kb/openssl-keytool.html)
Se eu não me engano na distribuição do jetty (em extra ou contrib) tinha um utilitário que convertia, mas não lembro se ele gera um p12.

Então para responder a sua pergunta, o seu cliente, para fazer ssl, tem que ter uma chave privada, e um certificado emitido por uma CA que o seu web server / trust manager engula. Um p12 é a maneira usual de agrupar isso, já que todos eles conseguem importar/exportar um p12.

Ps1- Se vc ver alguma referencia à pfx ignore… 8)
Ps2- Se vc gostou do pkcs12, vc vai adorar o pkcs15 :twisted:

qq coisa grita…

Eu já consegui gerar o meu PKCS12 através do keytool.
O lançe para fazer a autenticação client-cert o cliente precisa de um certificado digital dele, no caso o ideal seria o pkcs12 pq o browser reconhece melhor…
configurei todo certinho a autenticação client-cert só que quando eu rodo a aplicação aparece a seguinte mensagem HTTP Status 400 - No client certificate chain in this request.
O ruim é que nao se econtra quase nenhum material referente ao client-cert

Vamos tentar uma receita em português não estruturado:

No cliente (browser), ingredientes:
i) Uma chave privada
ii) Um certificado X509 emitido por uma CA que vc tenha posto como confiável
iii) [nem tanto opcional] A chain desta CA

modo de preparo:
misture bem os ingredientes num pkcs12, temperando a password a gosto e importe no browser. Verifique a importação: No IE é em tools->internet options->content>certificates, na aba “pessoal” está o seu certificado, o meio da chain está em “autoridades intermediárias” e a ca root está em “…raiz confiável”. No Firefox 2 é em ferramentas->opções->avançado->criptografia->certificados. Aqueça em banho-maria e conecte no seu servidor. Se esquentar demais o seu hd torra, cuidado.

Qual é o problema:

  1. O browser conecta e inicia o SSL
  2. O servidor responde “Oi, eu sou o server e tenho este certificado. Eu mostrei o meu agora vc mostra o seu, ok ?”
  3. O browser se faz de malandro diz ok e não manda nada
  4. O server se sentindo abusado, aborta com o code 400.
  5. O browser diz para vc que a culpa é do server que fechou a porta na cara dele.

se localizou ? :slight_smile:

Amigos,

  1. O Serasa me enviou o meu certificado empresa.cer e ITI.cer, SerasaACP.cer e SerasaCD.cer
  2. Através do keyMan (IBM) importe o meu empresakeystore, empresa.cer, ITI.cer,SerasaACP.cer e SerasaCD.cer
  3. Salve tudo isso no formato .pfx (PCKS12)
  4. Instalei pelo internet Explorer
  5. Ao verificar no internet explorer as propriedades deste .pfx instalado, tem a seguinte mensagem:
    este certificado raiz da autoridade de certificação não é confiável.Para ativar a confiabilidade, instale este
    certificado no armazenamento de autoridades de certificações de raiz de confiança

1o. Detalhe: o período de validade está conforme o dia que criei o keystore pelo keytool . Exemplo: 28/10/2008 a 26/01/2008
e o certificado a validade é 14/11/2008 a 14/11/2009

2o. Detalhe: no caminho de certificação
está com x em vermelho com o nome do keystore criado
exemplo: empresakeystore

Status do certificado: Este certificado raiz da autoridade de certificação não é confiável
porque não está no armazenamento das autoridades de certificação da raiz de confiança

Qual seria o passo correto de criar o .pfx através da minha keystore (chave privada) e o .cer (fornecido pela AC Serasa)

O meu certificado é A1 Servidor.

Abraços,

Revelino

Pessoal, favor desconsiderar este problema acima, o que ocorreu é que o certificado estava com server/client ativado, não serve para a situação da
NF-e, desta forma já solicitei outro PJ Client ativado.

Obrigado pelo empenho de todos.