2

我收到错误

无法检索证书,因为指纹无效。验证指纹并重试。

当我尝试在 LocalMachine 证书存储中使用证书时。

我有一个管理员帐户在LocalMachine证书存储中安装了证书(包括私钥),并为某些用户(例如功能 ID)提供了对私钥的访问权限。

我希望能够运行以下代码来获取指纹,然后在Invoke-WebRequest调用中使用它:

$certStorePath  = "Cert:\LocalMachine\My"
$certDetails    = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"}   # Returns one result
$certThumbprint = $certDetails.Thumbprint

Invoke-WebRequest -Uri $externalUrl -Proxy $proxyServer -UseBasicParsing -CertificateThumbprint $certThumbprint

我可以获得包括指纹($certDetails)在内的证书详细信息,但似乎权限不允许我(或 FID)使用证书(或者可能只是访问证书的私钥部分)。当证书安装在CurrentUser存储中时,该代码有效。

如何为此类非管理员用户启用对LocalMachine存储中证书的访问权限?

4

1 回答 1

2

似乎问题与这段代码有关,Invoke-WebRequest以及它是如何在这段代码中使用的。

代码的第一部分能够成功访问证书:

$certStorePath  = "Cert:\LocalMachine\My"
$certDetails    = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"}

但是,尽管指纹在所有证书存储中都是唯一的(例如,这个指纹仅存在于 LocalMachine 中),Invoke-WebRequest但无法访问它,因为只会在 CurrentUser 证书存储中查找。

因此,总体而言,要使其正常工作:

  1. 安装包含私钥的证书。
  2. 向适当的用户/FID 提供对证书私钥部分的访问权限。
  3. 用于Get-ChildItem获取证书本身,并将其传递Invoke-WebRequest不是指纹:
$certStorePath = "Cert:\LocalMachine\My"
$certificate   = Get-ChildItem -Path $certStorePath | Where-Object {$_.Subject -like "*myCert*"}   # Returns one result

Invoke-WebRequest -Uri $externalUrl -Proxy $proxyServer -UseBasicParsing -Certificate $certificate
于 2019-08-22T16:05:24.173 回答