新建自签名证书 -CertStoreLocation 找不到路径

8
使用New-SelfSignedCertificate命令,我想将硬盘上的位置指定为C:\Development\My Project。此命令如下:
New-SelfSignedCertificate -CertStoreLocation "cert:\LocalMachine\Development\My Project" 

出现如下错误:

无法找到路径 'Cert:\LocalMachine\Development\My Project',因为它不存在。

我该怎么做?

$PSVersionTable.PSVersion
Major  Minor  Build  Revision
-----  -----  -----  --------
5      0      10586  962

路径是否存在:cd cert:; cd localmachine; ls。如果开发不存在,则您的问题是指定的证书存储路径需要创建。 - thepip3r
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powershell.security/providers/new-item-for-certificate - thepip3r
C:\Development\My Project 存在于文件系统中。因此,显然,在文件系统和 LocalMachine 证书存储位置之间存在差异。 - Al Lelopath
@thepip3r:New-Item -Path Cert:\LocalMachine\Development\My Project会在C:\Development\My Project创建一个存储位置,我能在文件资源管理器中看到它吗? - Al Lelopath
1
它应该是存在的,但你在文件资源管理器中看不到它,但应该能够在证书管理器(certmgr.msc)中看到。因为直接执行它会默认到用户存储,所以你必须从MMC加载。所以...mmc.exe,添加-> 选中,证书存储(我想)。 - thepip3r
我现在可以看到这是真的。如果我使用不带空格的路径(并且我没有使用New-Item),并且使用-CertStoreLocation,我可以成功执行命令,这样就有效了。因此,问题似乎出在路径中的空格上。 - Al Lelopath
2个回答

14

您指定的路径New-SelfSignedCertificate -CertStoreLocation是证书存储而非文件路径。最可能的情况是您想要指定cert:\LocalMachine\my,这将在您的个人存储中创建证书,然后如果您需要以文件形式使用它,则导出该证书到硬盘上的文件中。以下类似的方法应该可以实现这一点:

$notAfter = [datetime]::Today.AddYears(2)
$thumb = (New-SelfSignedCertificate -CertStoreLocation cert:\localmachine\my -DnsName $env:USERDNSDOMAIN -KeyExportPolicy Exportable -Provider "Microsoft Enhanced RSA and AES Cryptographic Provider" -NotAfter $notAfter).Thumbprint
$pwd = 'SuperS3cret!'
$SSpwd = ConvertTo-SecureString -String $pwd -Force -AsPlainText
Export-PfxCertificate -cert "cert:\localmachine\my\$thumb" -FilePath "C:\Development\My Project\MyDevCert.pfx" -Password $SSpwd

如果这让你感到困惑,你可以把它当作文件路径来处理的原因是PowerShell在加载时会挂载一个名为“cert:”的驱动器,就像挂载“c:”或“d:”驱动器一样。 这是一个相当独特的功能,使得与证书存储交互类似于文件系统,但并不完全相同。 - thepip3r
你发现了我的思路错误,谢谢,我会勾选它。我无法生成有效的证书,所以我已经发布了另一个问题 - Al Lelopath
哦,我明白了,我应该在我的评论前加上@TheMadTechnician。 - Al Lelopath
@TheMadTechnician 有没有一种方法可以在不使用证书存储的情况下创建证书? - fra
@fra 我目前没有意识到有什么问题,但为什么不使用它呢?如果你不想保留它,只需从证书存储中删除即可。 - TheMadTechnician

2

当我为CurrentUser范围定义了未定义的执行策略时,就会出现此错误。

Get-ExecutionPolicy -List

如果未定义,则使用以下命令将其设置为RemoteSigned。
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接