标签: certificate-store

Personal and Web Hosting证书商店有什么区别?

在此输入图像描述

在Internet信息服务管理器中,在创建或导入证书时,您可以在Personal和Web Hosting证书存储区之间进行选项.

有什么不同?

windows iis ssl-certificate certificate-store windows-server

78
推荐指数
3
解决办法
5万
查看次数

"尝试加载证书的私钥时,指定了无效的提供程序类型"CryptographicException

我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些XML,然后再将其发送给他们.我在C#中以编程方式这样做,但我认为这是一个权限或配置错误的问题,因此我将重点关注似乎最相关的事实:

  • 我不认为这个问题与代码有关; 我的代码适用于其他计算机,该问题会影响Microsoft的示例代码.
  • 证书是作为PFX文件提供的,仅用于测试目的,因此它还包括虚拟证书颁发机构.
  • 使用MMC.exe,我可以将证书导入本地计算机的个人存储,然后将私钥授予所有相关帐户,并将证书颁发机构拖放到受信任的根证书颁发机构.
  • 使用C#,我可以加载证书(由其指纹识别)并验证它是否具有私钥X509Certificate2.HasPrivateKey.但是,尝试读取密钥会导致错误.在.NET中,CryptographicException在尝试访问该属性时抛出消息"指定了无效的提供程序类型" X509Certificate2.PrivateKey.在Win32中,调用该方法CryptAcquireCertificatePrivateKey返回等效的HRESULT , NTE_BAD_PROV_TYPE.
  • 当使用两个Microsoft自己的代码示例来读取证书的私钥时,也会出现相同的异常.
  • 在当前用户(而不是本地计算机)的等效存储中安装相同的证书,可以成功加载私钥.
  • 我在Windows 8.1上具有本地管理员权限,我尝试在正常模式和高级模式下运行我的代码.Windows 7和Windows 8上的同事已能够从本地计算机商店加载密钥以获得相同的证书.
  • 我可以成功读取自签名IIS测试证书的私钥,该证书位于同一个商店位置.
  • 我已经针对.NET 4.5(这个错误已经报告了一些旧版本的框架).
  • 我不认为这是证书模板的问题,因为我希望同样影响本地机器和当前用户商店?

与我的同事不同,我之前曾多次尝试以各种方式卸载和重新安装证书,包括通过IIS管理器,还包括来自同一发行人的旧证书.我在MMC中看不到任何旧证书或重复证书的痕迹.但是,我确实有许多相同大小的私钥文件,基于最后写入时间,在我的各种安装尝试后必须留下.这些位于以下位置,分别用于本地计算机和当前用户存储:

C:\ ProgramData \微软\加密\ RSA\MachineKeys的

c:\ Users \\ AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21- [其余用户ID]

所以,任何人都可以建议是否:

  • 使用MMC卸载证书是一个好主意,删除所有看起来像孤立私钥的文件,然后重新安装证书并重试?
  • 还有其他文件我应该尝试手动删除吗?
  • 还有什么我应该尝试的吗?

更新 - 添加了一个代码示例,显示尝试读取私钥:

static void Main()
{
    // Exception occurs when trying to read the private key after loading certificate from here:
    X509Store store = new X509Store("MY", StoreLocation.LocalMachine);
    // Exception does not occur if certificate was installed to, and …
Run Code Online (Sandbox Code Playgroud)

c# windows certificate mmc certificate-store

37
推荐指数
7
解决办法
4万
查看次数

从C#中的证书存储中获取证书列表

对于安全的应用程序,我需要在对话框中选择证书.如何使用C#访问证书存储区或其中的一部分(例如storeLocation="Local Machine"storeName="My")并从中获取所有证书的集合?在此先感谢您的帮助.

c# certificate certificate-store x509certificate

36
推荐指数
4
解决办法
9万
查看次数

使用Windows证书存储区中的证书和私钥与OpenSSL

我正在尝试制作一个在Delphi XE中使用某些Web服务的程序.要连接到Web服务,我必须使用自签名证书,该证书存储在Windows证书库中.我使用CertOpenSystemStore打开证书库,获取证书CertFindCertificateInStore并进行设置SSL_CTX_use_certificate.没问题.然后我得到公钥blob CryptExportKey并组成一个私钥,如下所示:

function PrivKeyBlob2RSA(const AKeyBlob: PByte; const ALength: Integer; const ASSLCtx: PSSL_CTX): IdSSLOpenSSLHeaders.PEVP_PKEY;
var
  modulus: PByte;
  bh: PBLOBHEADER;
  rp: PRSAPUBKEY;
  rsa_modlen: DWORD;
  rsa_modulus: PAnsiChar;
  rkey: PRSA;
begin
  bh := PBLOBHEADER(AKeyBlob);
  Assert(bh^.bType = PUBLICKEYBLOB);
  rp := PRSAPUBKEY(AKeyBlob + 8);
  Assert(rp.magic = $31415352);
  rsa_modulus := PAnsiChar(Integer(Pointer(rp))+12);
  rkey := RSA_new_method(ASSLCtx.client_cert_engine);
  rkey^.References := 1;
  rkey^.e := BN_new;
  rkey^.n := BN_new;
  BN_set_word(rkey^.e, rp^.pubexp);
  rsa_modlen := (rp^.bitlen div 8) + 1;
  modulus := AllocMem(rsa_modlen);
  CopyMemory(modulus, rsa_modulus, rsa_modlen);
  RevBuffer(modulus, rsa_modlen);
  BN_bin2bn(modulus, …
Run Code Online (Sandbox Code Playgroud)

windows delphi openssl certificate-store

27
推荐指数
1
解决办法
3478
查看次数

"我的"证书商店去了哪里?

因为我很棒我想在我的7盒子上使用VS2k10 B2运行最新的WIF演示应用程序... 64位当然(我的脖子很强)我遇到了运行问题.

整个演示事项的一部分要求我在本地计算机上安装一些证书.问题是他们要求我将一些网站证书安装到名为LocalMachine/My的证书商店中.好吧,似乎没有任何/我了.有一个名为Personal的可疑类似商店,但如果我在那里安装证书并更改配置以查看LocalMachine/Personal,则该应用程序无效.

如果我在TrustedPeople中安装证书(由于我尝试使用Personal时抛出的异常,它被提及为有效位置),这是否足够?在生产机器上这样做会被认为是坏形式吗?


可以在以下位置找到Windows Identity Foundation测试项目:http: //claimsbasedwpf.codeplex.com

例外:

属性名称:'certificateReference'错误:'ID1025:找不到符合条件的唯一证书.StoreName:'My'StoreLocation:'LocalMachine'X509FindType:'FindBySubjectDistinguishedName'FindValue:'CN = busta-rpsts.com''

certificate certificate-store visual-studio wif

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

使用OpenSSL API以编程方式验证证书链

这与其他问题非常相似,但我看过的问题要么没有答案,要么也不会问同样的问题.我有一个自签名的CA证书,以及使用该CA证书签名的另外两个证书.我很确定证书是正确的,因为'openssl verify'有效:

$ openssl verify -CAfile ca.pem server.pem
server.pem: OK
Run Code Online (Sandbox Code Playgroud)

(以上是从记忆中,我没有在他面前,所以它可能会略微偏离).

现在我想以编程方式验证证书.我有一个带伪代码的实用函数:

int verify_cert(X509 *cert, X509 *cacert)
{
     int ret;
     X509_STORE *store;
     X509_STORE_CTX *ctx;

     store = X509_STORE_new();
     X590_STORE_add_cert(store, cacert);

     ctx = X509_STORE_CTX_new();
     X509_STORE_CTX_init(ctx, store, cert, NULL);

     ret = X590_verify_cert(ctx);

     /* check for errors and clean up */
}
Run Code Online (Sandbox Code Playgroud)

我的问题是上面的代码总是返回"找不到发行者证书".我做错了什么?我相信我正在创建一个新的商店,添加cacert,创建一个新的上下文,并使用指向包含CA的商店的指针将要验证的子证书添加到上下文中.我显然做错了什么,但我不确定是什么.

有任何想法吗?

更新:我知道我可以将这些证书保存到磁盘并使用类似X509_LOOKUP_file之类的东西.我正在寻找一种不会不必要地接触磁盘的解决方案.

c openssl certificate-store x509 pkix

22
推荐指数
3
解决办法
4万
查看次数

如何配置Git以信任来自Windows证书存储区的证书?

目前.gitconfig,我的用户目录中有以下条目.

...
[http]
    sslCAInfo=C:\\Users\\julian.lettner\\.ssh\\git-test.pem
...
Run Code Online (Sandbox Code Playgroud)

这设置了在与git服务器交互时使用的证书(我公司的git服务器所需).

但是现在我无法克隆其他存储库(例如GitHub上的公共存储库),因为客户端始终使用被其他服务器拒绝的已配置证书.

我如何规避此认证问题?我可以配置Git使用Windows证书存储区进行身份验证吗?

windows git ssl-certificate certificate-store

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

在 Windows 上不使用 OpenSSL 从 pfx 文件或证书存储中提取私钥

正如标题所示,我想在不使用 OpenSSL 或任何其他第三方工具的情况下导出我的私钥。如果我需要一个.cer文件或.pfx文件,我可以通过 MMC 或 PowerShell 轻松导出这些文件,pkiclient但我找不到获取私钥的方法。

https://docs.microsoft.com/en-us/powershell/module/pkiclient/export-certificate?view=win10-ps

使用像https://www.sslshopper.com/ssl-converter.html这样的在线工具是不行的。

PS版本:

PS C:\Users\oscar> $PSVersionTable

Name                           Value
----                           -----
PSVersion                      5.1.17134.228
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17134.228
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1
Run Code Online (Sandbox Code Playgroud)

我可以像这样获得公钥:

(Get-PfxCertificate -FilePath C:\Users\oscar\Desktop\localhost.pfx).GetPublicKey()
Run Code Online (Sandbox Code Playgroud)

并像这样导出整个证书:

(Get-PfxCertificate -FilePath C:\Users\oscar\Desktop\localhost.pfx).GetRawCertData()
Run Code Online (Sandbox Code Playgroud)

结果来自

PS C:\Users\oscar> $mypwd = ConvertTo-SecureString -String "MyPassword" -Force -AsPlainText
PS C:\Users\oscar> $mypfx = Get-PfxData -FilePath C:\Users\oscar\Desktop\localhost.pfx -Password $mypwd
PS C:\Users\oscar> $mypfx

OtherCertificates EndEntityCertificates
----------------- ---------------------
{}                {[Subject]... …
Run Code Online (Sandbox Code Playgroud)

windows powershell certificate certificate-store

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

Google Chrome客户端证书弹出窗口

我正在为我的客户实现相互身份验证,以解决不必使用动态IP持续将某些代理机构列入白名单的问题.这个过程适用于我在Windows环境(Windows 7)中尝试过的所有浏览器.

问题是每次用户访问该站点时都会弹出一个弹出窗口.在大多数浏览器中,当您第一次访问该网站时,这是一次性的.但是,在Google Chrome上,弹出窗口会出现在每个POST/GET请求中.我找到了如何通过以下链接禁用IE和FF的弹出窗口:http://docs.threerings.org.uk/wiki/Certificates_without_prompting,但Chrome仍然存在问题.

我已经尝试将证书安装到受信任的根证书颁发机构,但是我收到一条错误消息,"导入失败,因为商店是只读的,商店已满,或者商店没有正确打开.".

如果有人知道我可以做些什么来绕过Chrome的弹出窗口,我们将不胜感激.

google-chrome certificate client-certificates certificate-store

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

所有不同X509KeyStorageFlags的基本原理是什么?

今天,一位同事遇到了另外一个与这些相关的错误!我发现这些标志在过去我自己真的很令人沮丧,因为如果你在实例化X509Certificate2对象或导出它们或将它们保存在X509Store中时会略微出错,你可能会遇到各种各样奇怪的错误,例如:

  • 意外地无法告诉NETSH.exe或ASP.net使用某个SSL证书[通过其指纹],即使您的机器商店中有该证书
  • 您可以意外地导出证书数据,但使用.Export()导出它而不使用私钥
  • 意外地,您的单元测试开始在较新的Windows版本上失败,显然是因为您没有使用正确的标志

是的,它们是有记录的,而且所有文档(以及一些文档似乎都有意义),但为什么它必须这么复杂?

.net windows certificate-store x509certificate2

8
推荐指数
1
解决办法
824
查看次数