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