A Verify
O método verifica se um certificado é confiável. Para ver exatamente por que a verificação está falhando, precisamos criar a cadeia:
$cert = Get-PfxCertificate -FilePath .\mycert.pfx
$chain = New-Object System.Security.Cryptography.X509Certificates.X509Chain
$chain.Build($cert)
$chain.ChainStatus
Quando eu repito suas etapas e executo esses comandos, obtenho um status de UntrustedRoot
. Isso significa que a verificação falhou porque o certificado não está assinado por uma autoridade de certificação confiável, o que faz sentido, já que estamos autografando-o (a -r
em makecert
).
Para verificar o certificado, importe-o para o armazenamento Autoridades de Certificação Raiz Confiáveis:
Import-PfxCertificate -CertStoreLocation Cert:\CurrentUser\Root -FilePath .\testcert.pfx -Password (Read-Host 'Password' -AsSecureString)
Digite a senha do PFX, aceite o grande diálogo de aviso e o certificado será adicionado. Então a verificação será aprovada. Se você preferir GUIs, certmgr.msc
fará o trabalho.
Você pode usar os parâmetros RSA muito bem sem que o certificado seja confiável para o seu computador. Digamos que o número 137 seja uma mensagem secreta para o detentor da chave privada. Podemos usar a chave pública para criptografar nossa mensagem:
$public = Get-PfxCertificate .\mycert.cer
$public.PublicKey.Key.Encrypt(@(137), $false)
Então, de alguma forma, o grande conjunto criptografado de bytes resultante (chamá-lo de $message
) chega ao detentor da chave privada, que recupera o número original:
$private = Get-PfxCertificate .\mycert.pfx
$private.PrivateKey.Decrypt($message)
Geralmente algo mais interessante / avançado ( consulte MSDN ) seria feito com as chaves. A questão é que os aplicativos podem usar o certificado sem a confiança da máquina.