X509Store 构造函数(字符串)有什么意义?

What is the point of the X509Store Constructor (String)?

似乎您可以根据任何字符串设置一个有效的 X509Store 对象。 例如。

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("abcdef")

我原来用的是

 $store = New-Object System.Security.Cryptography.X509Certificates.X509Store("Cert:\CurrentUser\My")

以为我有一个 My 商店的有效对象,但是我在调​​用时一直遇到异常:

$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::MaxAllowed) #Exception calling "Open" with "1" argument(s): "The parameter is incorrect.

字符串是否应采用特定格式?

编辑: 似乎字符串可以是任何东西,只要没有斜线即可。所以我需要使用$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("My")

经过查阅MSDN X509Store Class documentation这里是我理解的要点

X509Store Class 有许多构造函数。在定义 class 的实例后,可以使用 Open 方法打开它。

如果实例指向有效 StoreLocation 中的有效 StoreName,则 Open 方法将打开证书存储区。如果 StoreLocation 正确,Open 方法还可以根据使用的标志 [System.Security.Cryptography.X509Certificates.OpenFlags] 创建新存储。

如果store实例定义不正确,open方法会生成一个System.ArgumentException.

有效的 StoreLocation 值为

  • 当前用户
  • 本地机器

有效的 StoreName 值为

  • 地址簿
  • AuthRoot
  • 证书颁发机构
  • 不允许
  • 我的
  • 根目录
  • 值得信赖的人
  • TrustedPublisher。

这是 MSDN 对 (String) 构造函数的描述。

"Use this constructor to create an X509Store object using a particular X.509 store name for the current user. To create a new store, specify a name that does not exist. A new store will be created with that name."

因此此代码应在 "CurrentUser" 中创建一个名为 "abcdef" 的新证书库。

$store = New-Object System.Security.Cryptography.X509Certificates.X509Store("abcdef")
$openFlags = [System.Security.Cryptography.X509Certificates.OpenFlags]::MaxAllowed
$store.Open($openFlags)

可以使用MMC验证。

因此,总而言之,存储构造函数参数 "StoreName" 和 "String" 是可以互换的。语义上 "StoreName" 用于引用预定义的值,而 "String" 可以引用任何值。