在Internet信息服务管理器中,在创建或导入证书时,您可以在Personal和Web Hosting证书存储区之间进行选项.
有什么不同?
windows iis ssl-certificate certificate-store windows-server
我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些XML,然后再将其发送给他们.我在C#中以编程方式这样做,但我认为这是一个权限或配置错误的问题,因此我将重点关注似乎最相关的事实:
X509Certificate2.HasPrivateKey
.但是,尝试读取密钥会导致错误.在.NET中,CryptographicException
在尝试访问该属性时抛出消息"指定了无效的提供程序类型" X509Certificate2.PrivateKey
.在Win32中,调用该方法CryptAcquireCertificatePrivateKey
返回等效的HRESULT , NTE_BAD_PROV_TYPE
.与我的同事不同,我之前曾多次尝试以各种方式卸载和重新安装证书,包括通过IIS管理器,还包括来自同一发行人的旧证书.我在MMC中看不到任何旧证书或重复证书的痕迹.但是,我确实有许多相同大小的私钥文件,基于最后写入时间,在我的各种安装尝试后必须留下.这些位于以下位置,分别用于本地计算机和当前用户存储:
C:\ ProgramData \微软\加密\ RSA\MachineKeys的
c:\ Users \\ AppData\Roaming\Microsoft\Crypto\RSA\S-1-5-21- [其余用户ID]
所以,任何人都可以建议是否:
更新 - 添加了一个代码示例,显示尝试读取私钥:
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#访问证书存储区或其中的一部分(例如storeLocation="Local Machine"
和storeName="My"
)并从中获取所有证书的集合?在此先感谢您的帮助.
我正在尝试制作一个在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) 因为我很棒我想在我的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''
这与其他问题非常相似,但我看过的问题要么没有答案,要么也不会问同样的问题.我有一个自签名的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之类的东西.我正在寻找一种不会不必要地接触磁盘的解决方案.
目前.gitconfig
,我的用户目录中有以下条目.
...
[http]
sslCAInfo=C:\\Users\\julian.lettner\\.ssh\\git-test.pem
...
Run Code Online (Sandbox Code Playgroud)
这设置了在与git服务器交互时使用的证书(我公司的git服务器所需).
但是现在我无法克隆其他存储库(例如GitHub上的公共存储库),因为客户端始终使用被其他服务器拒绝的已配置证书.
我如何规避此认证问题?我可以配置Git使用Windows证书存储区进行身份验证吗?
正如标题所示,我想在不使用 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) 我正在为我的客户实现相互身份验证,以解决不必使用动态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
今天,一位同事遇到了另外一个与这些相关的错误!我发现这些标志在过去我自己真的很令人沮丧,因为如果你在实例化X509Certificate2对象或导出它们或将它们保存在X509Store中时会略微出错,你可能会遇到各种各样奇怪的错误,例如:
是的,它们是有记录的,而且所有文档(以及一些文档似乎都有意义),但为什么它必须这么复杂?