Instale vários .cer (certificados) de um diretório de rede usando o powershell, mas primeiro verifique se eles já estão instalados

1

Eu ainda estou aprendendo os caminhos do PowerShell e estou tendo dificuldades em resolver um problema.

Eu gostaria de ter o seguinte fluxo lógico:

  1. Vá para \ fileserver \ certs e puxe todas as impressões digitais de cada arquivo .cer existente
  2. Execute a lista de impressões digitais remotas em relação à cert local: \ lista de locais das impressões digitais
  3. Se um .cer não estiver instalado localmente com base em uma impressão digital ausente, instale o .cer do \ fileserver \ certs no cert: \ location

Há um pouco mais de lógica no meio, mas no geral é isso que eu procuro realizar. Meu principal problema é extrair a impressão digital dos arquivos .cer remotos ou determinar se eles estão instalados localmente de uma maneira diferente (até onde eu sei, a impressão digital é a maneira mais lógica, mas estou totalmente aberto a sugestões).

Eu poderia apenas instalar todos os certificados no diretório toda vez que meu script fosse executado, mas temo sobrecarga desnecessária, e o show stopper é que ele exigiria direitos de administrador toda vez que fosse executado, em vez de no primeiro lançamento ou detecção de novos certs.

O principal problema é que não consigo coletar a impressão digital do arquivo .cer, e as sugestões do Google são infrutíferas até o momento. Se eu puder descobrir como puxar a impressão digital do agente remoto, tenho certeza de que poderia descobrir a lógica necessária desse ponto.

Meu código atual:

#Add certificate to local trusted store
$certCheckLocation = "Cert:\LocalMachine\Root\(Cert Thumbprint...)"
$certPutLocation = "Cert:\LocalMachine\Root\"
$certFile = (Get-ChildItem -Path \server\file.cer)
$certCheckFile = (Test-Path -Path $certCheckLocation)

if ($certCheckFile -eq $false) {

        If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator"))
        {
            $messageBox.Popup("Please run as an admin.",5,"Proxy Utility",0)
            Break
        } else {
            $certFile | Import-Certificate -CertStoreLocation $certPutLocation
        }
}

Abaixo, este é o código da GUI e algumas coisas que alteram a configuração do proxy, etc.

Em suma, é necessário um único cer e aplica-o à máquina local. Se o usuário não for admin, ele solicita que ele reinicie o script como admin. Eu pretendo escalar isso de uma forma foreach para que, quando um cer é adicionado a um diretório de rede específico, o script irá notar no lançamento e tentar instalar o novo certificado. Se o usuário não for admin, ele solicitará APENAS quando precisar instalar um novo certificado.

Ainda aprendendo o powershell, então qualquer ajuda seria muito apreciada!

    
por Tucker 26.03.2018 / 17:42

1 resposta

1

A maneira mais fácil de extrair uma impressão digital de um arquivo .cer seria criar um objeto de certificado no powershell e importar o certificado nele. Depois disso, você pode exibir o objeto incluindo a impressão digital.

Algo parecido com isto:

$cer = New-Object System.Security.Cryptography.X509Certificates.X509Certificate2
$cer.Import("PathToCer\cabundle.crt")
$cer.Thumbprint
    
por 27.03.2018 / 22:59