在 Windows 上,加密机密钥存储在:%ProgramData%\Microsoft\Crypto\RSA\MachineKeys
如何确定每个键对应的容器名称?
我猜这种模糊性是设计使然——“通过模糊来实现安全”?
答案1
Foreach ($MachineCert In Get-ChildItem Cert:\LocalMachine -Recurse | Where HasPrivateKey)
{
$MachineCert |
Select @{n='Subject'; e={ $MachineCert.Subject }},
@{n='Container'; e={ $MachineCert.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName }},
@{n='Store'; e={ $MachineCert.PSParentPath }}
}
Subject Container Store
------- --------- -----
CN=Ryan-Win81-2014 f686aa...9dfa-7c3d5dc833ac Remote Desktop
CN=localhost fad662...9dfa-7c3d5dc833ac My
请注意,您可能需要管理员/UAC提升权限,然后才可以读取某些证书的某些属性。
我不能肯定地说这种“模糊性”是故意设计的,但这并不让我感到惊讶。不幸的是,大多数人不了解什么是 X509 证书或什么是私钥,大多数人也不关心。通过为您完成此操作,Windows 至少可以将私钥隐藏在文件系统深处相对安全的位置,因为如果大多数用户必须自己处理私钥,他们只会将私钥放在桌面上。