Como visualizar e limpar a cache CRL/OCSP

Tenho verificado que existem muitas questões relacionadas com a visualização e limpeza da cache das CRL’s, tanto em máquinas Windows 7/2008 R2 como Vista/Windows 2008, e por isso decidi dedicar este post às questões mais frequentes sobre este assunto.

Para visualizar a “cache” das CRL’s (ou do OCSP) podemos recorrer ao utilitário Certutil. Antes disso convém referir que temos dois tipos de “cache”: do utilizador e da máquina, e cada contexto tem a sua localização em disco. Este é um ponto importante pois pode-nos ajudar a detectar rapidamente onde está o problema. :)

Desde o Windows Vista, o Sistema Operativo cria uma Sessão Isolada chamada “Session 0”, utilizada para Serviços e drivers, e uma “Session 1” para o primeiro utilizador que faz logon na máquina. Desta forma, a execução de serviços ocorre numa sessão diferente das aplicações a fim de garantir mais segurança. Isto faz com que seja necessário utilizar a ferramenta psexec  do “sysinternals” para acedemos ao contexto da máquina:

psexec -i -s cmd.exe

PsExec
https://technet.microsoft.com/en-us/sysinternals/bb897553

Nota: a linha de comando deve ser executada com privilégios de Administrador

(….)

- Para ver a cache OCSP :
certutil -urlcache ocsp

- Para ver a cache das CRL’s :
certutil -urlcache crl

- Para visualizar ambos as cache’s  OCSP e CRL:
certutil -urlcache *

Para apagar a cache podemos utilizar os seguintes comandos:

- Apaga a cache OCSP:
certutil -urlcache ocsp delete

- Apaga a cache CRL:
certutil -urlcache crl delete

- Apaga ambos:
certutil -urlcache * delete

Importante: ao apagar a “cache” utilizando os comandos mencionados anteriormente não estamos a apagar a cache que está em memória. Para isso existe um comando adicional onde se define a data/hora para a validade da cache:

certutil -setreg chain\ChainCacheResyncFiletime @now

O comando acima invalida imediatamente a cache das CRL’s que estão em memória.

(….)

Em alternativa podemos agendar quantos dias/horas faltam para a cache ser renovada, podendo definir um valor com uma data futura. Isto implica que a Cache será desactivada e que nenhuma entrada poderá ser utilizada até a data que especificarmos. 

Este tipo de configuração é particularmente útil para efeito de testes. Exemplo: 2 Dias e 6 horas

certutil –setreg chain\ChainCacheResyncFiletime @now+2:6

NOTA: Como referido anteriormente este comando desactiva temporariamente a actualização/utilização da cache até à data definida.

(….)

O seguinte comando serve para visualizar quando foi a ultima vez que a Cache foi desactivada:

certutil -getreg chain\ChainCacheResyncFiletime

Nota: Se o ChainCacheResyncFiletime nunca foi manualmente alterado a chave de registo não existe e a seguinte mensagem de erro é retornada:

CertUtil: -getreg command FAILED: 0x80070002 (WIN32: 2)
CertUtil: The system cannot find the file specified.

Este erro pode ser ignorado porque significa que neste caso ocorre o caching CRL padrão.

(….)

Para finalizar, os valores do ChainCacheResynchFiletime encontram-se na seguinte localização do registo:

HKLM\SOFTWARE\Microsoft\Cryptography\OID\EncodingType 0\CertDllCreateCertificateChainEngine\Config registry key;
ChainCacheResynchFiletime

Boa leitura :)

JP