相关疑难解决方法(0)

在Root中插入证书(带私钥),LocalMachine证书存储在.NET 4中失败

我在localmachine的根证书存储中插入带有私钥的新CA证书时遇到问题.

这是发生的事情:

//This doesn't help either.
new StorePermission (PermissionState.Unrestricted) { Flags = StorePermissionFlags.AddToStore }.Assert();
var store = new X509Store(StoreName.Root, StoreLocation.LocalMachine);
privkey.PersistKeyInCsp = true;
//This shouldn't be necessary doesn't make a difference what so ever.
RSACryptoServiceProvider.UseMachineKeyStore = true;
cert.PrivateKey = privkey;
store.Open (OpenFlags.MaxAllowed);
store.Add (cert);
store.Close ();
Run Code Online (Sandbox Code Playgroud)

证书被插入,它看起来都很花哨:(见!) 请注意它说它有一个私钥

注意:据说它有一个私钥.

所以你会说用FindPrivateKey可以找到它

C:\Users\Administrator\Desktop>FindPrivateKey.exe Root LocalMachine -t "54 11 b1 f4 31 99 19 d3 5a f0 5f 01 95 fc aa 6f 71 12 13 eb"
FindPrivateKey failed for the following …
Run Code Online (Sandbox Code Playgroud)

c# bouncycastle certificate .net-4.0 x509certificate

17
推荐指数
2
解决办法
2万
查看次数

以编程方式使用私钥导入证书

我正在尝试在C#应用程序中使用HttpListener类来让迷你Web服务器通过SSL提供内容.为此,我需要使用httpcfg工具.我有一个带有公钥和私钥对的.pfx文件.如果我使用mmc手动将此密钥对导入本地机器商店,一切正常.但是,如果我使用X509Store类以编程方式导入此密钥对,则无法连接到我的迷你网络服务器.请注意,在这两种方法中,证书都会导入到LocalMachine中的MY商店.奇怪的是,一旦我以编程方式导入它,我就可以在mmc中查看证书,当我查看它时,UI表明私钥也可用于此证书.

深入挖掘,我注意到当我手动导入密钥对时,我可以看到一个新文件出现C:\Documents and Settings\All Users\Application Data\Microsoft\Crypto\RSA\MachineKeys,但是当我以编程方式导入时,不会出现一个.在相关的说明中,当我删除手动导入的证书时,它不会从前面提到的目录中删除相应的私钥文件.

最后,我的问题是:当我以编程方式将证书添加到商店时,存储的私钥在哪里以及为什么HttpListener类(HttpApi)无法访问它?

请注意,这个问题略有关联,但我不认为权限是问题,因为这一切都是作为同一个Windows用户完成的: 如何从.NET设置X.509证书的私钥文件的读取权限

.net c# ssl ssl-certificate

12
推荐指数
1
解决办法
1万
查看次数

证书存储区中证书的私钥不可读

我想我和这个人有同样的问题,但我没有他/她那么幸运,因为提供的解决方案对我不起作用.

提供的解决方案在C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys(不在C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA子目录中)和(和子目录)中查找文件但是由于我希望安装程序将应用程序安装到所有用户,因此自定义操作在SYSTEM-User 下运行,这导致实际创建的文件在C:\ProgramData\Application Data\Microsoft\Crypto\RSA\S-1-5-18.

当以管理员(右键单击 - >运行为管理员)运行"普通"应用程序执行完全相同的代码时,将创建一个文件C:\Users\[Username]\AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21-1154405193-2177794320-4133247715-1000.

使用WIX自定义操作生成的证书似乎没有私钥(" 密钥集不存在 "),而"正常"应用程序生成的证书具有.

当在文件的权限来看,他们似乎是好的,即使它们不同(工作一个不包括SYSTEM用户),即使添加了后SYSTEM一个的("非工作")的文件,我无法阅读私钥,这里也是一样的错误.

然后我用了FindPrivateKey UTIL中找到相应的文件,但我得到的是"Unable to obtain private key file name".

好的,这里有什么?Windows在哪里存储SYSTEM用户存储的证书的私钥?也许没有创建任何私钥文件?为什么?

c# uac custom-action certificate private-key

11
推荐指数
1
解决办法
1万
查看次数

如何授予帐户访问证书的权限?

我在MSMQ服务个人存储中有证书,我需要授予网络服务访问证书的权限.

我知道这样做的唯一方法是使用win2008/7上的certutil.exe,如下所示:

certutil -service -service -repairstore MSMQ\My "" D:PAI(A;;GA;;;BA)(A;;GA;;;SY)(A;;GR;;;NS)
Run Code Online (Sandbox Code Playgroud)

(感谢http://blogs.msdn.com/b/gautamm/archive/2010/10/26/https-messaging-with-client-side-certificate-fails-with-iis-error-403.aspx)

但是,win2003/XP上的certutil无法识别-service参数,所以没有好处.

我的问题是如何以适合Win2003/XP和Win2008/7的方式实现?

我需要一种非交互式方法(命令行实用程序,脚本,COM/.NET/Win32 API).

windows security certificate

6
推荐指数
1
解决办法
3万
查看次数

如何从powershell授予私钥的权限

我正在尝试从powershell脚本中找到一种授予私钥权限的方法.证书存储在CNG中.欢迎所有想法.

powershell cng

4
推荐指数
1
解决办法
4624
查看次数

通过 Powershell 为证书的私钥分配权限(Win 2012 R2)

在连接到域的 Windows Server 2012 R2 机器上,我正在运行以下语句:

$target_machine_fqdn = [System.Net.Dns]::GetHostByName($env:computerName)

$certificate_request = Get-Certificate `
    -Template 'AcmeComputer' `
    -DnsName $target_machine_fqdn `
    -CertStoreLocation 'Cert:\LocalMachine\My'
Run Code Online (Sandbox Code Playgroud)

我正在向域的 CA 请求主机证书。该语句返回没有错误。为机器生成证书并根据要求将其放置在“Cert:\LocalMachine\My”中。

问题:我不知道如何向服务帐户授予证书私钥的权限。

现在,大约有 1,000篇文章通过检索UniqueKeyContainerName以如下开头的代码来指导人们如何授予权限:

$certificate.PrivateKey.CspKeyContainerInfo.UniqueKeyContainerName
Run Code Online (Sandbox Code Playgroud)

这在这里行不通。虽然证书有私钥,但私钥数据成员为空:

在此处输入图片说明

在我刚刚逃避的解决方案有效的情况下,私钥在文件系统上。但是,在这种情况下,私钥位于以下注册表中:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\SystemCertificates\MY\Keys
Run Code Online (Sandbox Code Playgroud)

使用证书 MMC-snapin 时,我可以看到证书。我可以管理私钥的权限。所以,我知道它在那里。不幸的是,我需要自动分配权限,因此不能选择使用证书 MMC-snapin。我需要通过 Powershell 以某种方式执行此操作。

windows powershell cryptography x509certificate

2
推荐指数
2
解决办法
6793
查看次数