Olá,
Gostaria de obter informações acerca do protocolo OCSP pois necessito implementar um cliente-servidor para comunicação através do protocolo OCSP. Até o momento já verifiquei diversos sites, assim como dei uma boa lida na RFC 2560 que sérvio para esclarecer bastante algumas dúvidas, contudo ainda fiquei em dúvida em relação a algumas coisas que estarei colocando a baixo:
O Response quando valida um request, deve emitir consigo uma assinatura que pode ser da CA que emitiu o certificado, de um responder de confiança do cliente ou de um responder designado por uma CA. A questão que fiquei em dúvida é como esse processo é feito? Se eu criar um servidor OCSP o que eu deveria assinar no documento, minha assinatura? Sendo uma assinatura que o cliente esteja pré-configurado para aceitar então não haveria problemas certo? Então como posso assinar esse response?
Outra dúvida é em relação a checagem pelo status do certificado que o servidor ocsp faz, ele faz essa checagem de uma lista CRL? Caso sim, onde fica armazenada essa lista CRL? Posso criar uma lista de certificados revogados em um diretório LDAP?
Localizei uma api chamada Bouncy Castle (http://www.bouncycastle.org/java.html) que parece servir bem para esses fins, mas localizei uma mensagem em um fórum de alguém que dizia que essa api podia ser substituída pelas novas funcionalidades de criptografia do java JDK 1.5, alguém já trabalhou com esse bouncy castle ou implementou um ocsp apartir dele?
Bom é isso, espero encontrar alguém perdido aqui que já tenha alguma vez mexido com esses assuntos para me dar um socorro!!!
O servidor OCSP deve (através de algum protocolo, tipicamente HTTP) assinar as respostas às requisições OCSP.
Como você mesmo disse, o cliente OCSP deve ter a cadeia de certificação para poder validar o certificado contido na assinatura da resposta OCSP completa, de alguma maneira. (Ele pode baixar isso mas no seu caso é mais simples ter todos esses certificados já no seu cacerts ou em algum outro keystore).
Para poder assinar o response, você precisa ver se há algum atributo especial que deve ser incluído na assinatura. Consulte a documentação das classes de OCSP do BouncyCastle.
A checagem pode ser feita através da leitura de uma CRL (a maneira mais simples), ou se o servidor OCSP tiver acesso ao banco de dados de certificados do CA (que pode estar, por exemplo, em um servidor LDAP) então ele pode fazer o necessário. Depende muito da sua infra-estrutura.
Não existe algum servidor de OCSP já pronto (open-source ou comercial)? Para você ter uma implementação decente de OCSP dá um bom trabalho.
Um monte de coisas que você precisa quando vai usar OCSP simplesmente não está disponível de maneira simples; talvez seja até possível fazer só com o JDK 1.5, mas de forma muito “torta”.
tiagomac
Valeu thingol,
eu vi um código exemplo de uma implementação e li um pouco mais a rfc e deu para esclarecer bastante, criar o request parece não ser complexo… ainda to me batendo em entender as diferentes entre o dito “Servidor OCSP” e o “OCSP Response” que no RFC 2560 parecem ser tratados de maneira distinta… ao que eu tava pensando o Response seria um objeto gerado pelo servidor OCSP, isso não está correto?
outra dúvida me bateu, que é em relação a utilização pelo cliente de um objeto response emitido pela linguagem java, ele poderá interpretar o resultado mesmo estando em um cliente escrito em C ou um cliente genérico tais como o cliente dos browsers?
pq a idéia seria de implementar isso em um service para que qualquer cliente possa validar os certificados emitidos com o Authority info access com o endereço desse servidor OCSP…
T
thingol
tiagomac:
Valeu thingol,
eu vi um código exemplo de uma implementação e li um pouco mais a rfc e deu para esclarecer bastante, criar o request parece não ser complexo… ainda to me batendo em entender as diferentes entre o dito “Servidor OCSP” e o “OCSP Response” que no RFC 2560 parecem ser tratados de maneira distinta… ao que eu tava pensando o Response seria um objeto gerado pelo servidor OCSP, isso não está correto?
O objeto response deve obedecer ao formato descrito na RFC, então se você fez as coisas direito, ele deve ser validado por qualquer tecnologia que implemente corretamente a RFC.
Como eu sempre digo, é indispensável testar com esses clientes, para ver se você não fez alguma coisa errado, ou está mandando (ou deixando de mandar) alguma coisa que os clientes habituais (como browsers) necessitam. Eu tive que fazer isso com S/MIME, e foi bastante tedioso.
pq a idéia seria de implementar isso em um service para que qualquer cliente possa validar os certificados emitidos com o Authority info access com o endereço desse servidor OCSP…
Por que é que você tem de implementar isso? Não existe isso pronto já? É questão de pagar (se quiser um produto comercial) ou de baixar os fontes e compilar (acho que existe em C++, Java e outras linguagens menos cotadas. É questão de procurar.)
tiagomac
Então thingol, mas uma vez obrigado pela resposta, ajudou bastante…
tipo, quanto a pegar um código pronto eu estou trabalhando mais ou menos dessa maneira, mas uma hora será necessário fazer modificações no código para adaptar as regras de negócio do cliente… ele precisa de um servidor que valide de maneira individual e que possa servir para outros clientes dele, de modo que um certificado possa estar OK junto a AC, mas está revogado perante ele… o S/MIME q vc citou é interessante, eu vou estudar essa possibilidade e tentar a implementação por ela… se todos os clientes fossem Java, eu poderia implementar uma solução mais simples usando a especificação, mas não ficaria aberta para outros mecanismos de comunicação, que foi um dos requisitos…
qualquer dúvida que aparecer eu posto aqui e mais uma vez muito obrigado!