O Visual Studio inicia normalmente em casa, depois o mesmo notebook entra no túnel corporativo e toda inicialização fica meio minuto na tela inicial. Remova a política e o atraso vai embora com ela; remova o túnel e acontece o mesmo. As duas observações são corretas, por isso os dois componentes vivem culpando um ao outro. A pergunta decisiva é se uma consulta de revogação de certificado espera um caminho que só o túnel oferece, ou se não encontra nenhum.

Meça a obtenção, não a inicialização

Uma política WDAC, implantada como arquivo SiPolicy.p7b assinado, decide quais imagens podem ser executadas na máquina. A integridade de código valida a cadeia de assinaturas de uma imagem antes da execução, e essa validação pode incluir uma pergunta de revogação. A resposta depende do ponto de distribuição de CRL ou do respondedor OCSP que o certificado nomeia em seu interior.

São solicitações de rede comuns, então o custo depende de onde o respondedor está. Quando só é acessível pelo túnel, ou o nome só é resolvido por um servidor DNS atrás do túnel, a validação espera o túnel ficar pronto. O Visual Studio carrega na inicialização um grande número de assemblies e extensões assinados, e um pequeno atraso por imagem vira uma parada visível. Nada está malformado e a política se comporta exatamente como configurada, por isso remover a política parece corrigir o problema.

Toda imagem assinada pode disparar uma chamada de rede

Comece por um binário assinado que já esteja no disco e peça à plataforma para verificá-lo com o mesmo comportamento de obtenção que uma inicialização usa. Execute o comando uma vez no túnel e uma vez fora dele, e depois compare as linhas de obtenção em vez do veredicto final.

certutil -verify -urlfetch C:\Tools\Contoso.Editor.dll
nslookup ocsp.contoso.example
Test-NetConnection ocsp.contoso.example -Port 80

A saída lista a cadeia, os endereços CRL e OCSP e se cada obtenção teve sucesso. Um respondedor que estoura o tempo no túnel e responde fora dele é a prova de que você precisa, e pesa muito mais do que uma impressão de lentidão. Se a obtenção tiver sucesso lentamente, anote o endereço para que a próxima etapa possa testar esse host diretamente.

Resolva o nome do host do respondedor e teste a acessibilidade fora da aplicação, porque um nome que não resolve nunca será corrigido por um ajuste do cliente. O log operacional do CodeIntegrity fornece a outra metade da prova, vinculando um evento de validação ao carimbo de data e hora da inicialização lenta.

Reduza o atraso sem remover o controle

Desativar a política ou passá-la para o modo de auditoria faz o atraso desaparecer e remove o controle implantado pela organização, então trate isso como o reparo errado. As opções mais estreitas são uma mudança de roteamento para que o respondedor seja acessível pelo túnel, uma exclusão no tunelamento dividido para os hosts do respondedor, uma correção de DNS quando o nome resolve para um endereço inalcançável, ou um proxy de cache suportado para os dados de revogação. Cada uma tem um dono diferente: a equipe de PKI cuida da acessibilidade do respondedor, a equipe de rede cuida da divisão do túnel e a equipe de endpoint cuida da política.

Excluir todo host de revogação do túnel não é automaticamente seguro, já que um respondedor interno pode ser interno de propósito. Confirme a exclusão com a equipe que opera a PKI antes de escrever uma regra que envia silenciosamente as verificações de certificado para a internet pública. Uma mudança feita sem essa confirmação é do tipo que é revertida na próxima atualização da política.

Verifique uma inicialização a frio após a mudança

Meça uma inicialização a frio nos dois estados e guarde os números, porque uma inicialização a quente quase não prova nada depois que os assemblies estão no cache. Repita a inicialização a partir de uma sessão nova para que o caminho de carregamento das extensões seja exercitado de novo.

Get-WinEvent -LogName Microsoft-Windows-CodeIntegrity/Operational -MaxEvents 40 |
  Where-Object { $_.TimeCreated -gt (Get-Date).AddMinutes(-10) }
Get-ChildItem C:\Windows\System32\CodeIntegrity\CiPolicies\Active
Get-CimInstance -ClassName Win32_DeviceGuard -Namespace root\Microsoft\Windows\DeviceGuard

Uma configuração reparada ainda contata o respondedor, ou usa um caminho de cache aprovado pela sua equipe de PKI, e o log mostra a validação sendo concluída em vez de expirar. Confirme que um aplicativo assinado recentemente ainda inicia, porque uma política que permite tudo não é um reparo bem-sucedido. Verifique também a pasta da política ativa e o estado de aplicação, para que se saiba que a política depurada é a que está em execução. Mantenha a cadeia de certificados, o endereço do respondedor e os carimbos de data e hora da inicialização no mesmo tíquete, porque uma renovação costuma mover o respondedor e deixa a regra de exclusão ou DNS desatualizada.

Artigos relacionados