我正在尝试读取第三方服务提供商与我共享的证书的私钥,因此我可以使用它来加密某些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) 我正在尝试在IIS7上运行的Web应用程序上设置双向身份验证.客户端主要是移动设备,首先我试图使用第三代iPad运行演示.我以为我首先要让它在我的工作站上运行(也运行IIS),然后通过iPad复制工作证书.
但是我撞墙了.
我已经让网站通过https安全运行并安装了自签名服务器证书,但我似乎无法弄清楚如何生成我可以在iPad上安装的客户端证书.当我在运行Windows 7的本地工作站上工作时,我无法使用通常的方法http://machinename/CertSvr来执行此操作.
所以我想知道是否有办法makecert生成测试客户端证书,或者我是否可以更改服务器证书中的使用标志,使其适合在客户端上使用.或者也许还有一些工具,谷歌的最后一天还没有发现?
更新:
我找到了这个指南并跟着它来了.这一切似乎工作,没有错误,我结束了两个PFX文件,一个用于服务器和一个客户端(我产生这些使用pvk2pfx,并保持原有的.pvk和.cer以防万一的文件).
我安装了服务器证书Certificates (Local Computer) > Trusted Root Certification Authority并在其下安装了客户端证书Certificates (Current User) > Personal.我还将服务器证书(CA一个)导入IIS.当IIS配置为接受或忽略客户端证书时,一切正常.但是一旦设置为'Require',我在申请该网站时会得到403.7.我也尝试将客户端证书导入到IE/Chrome中的证书存储区,但同样没有骰子.
有什么明显的东西我做错了吗?
我试图从Microsoft文档运行脚本GetAppConfigSettings.ps1 帮助设置密钥库
该脚本包含以下内容
# **********************************************************************************************
# Prep the cert credential data
# **********************************************************************************************
$certificateName = "$applicationName" + "cert"
$myCertThumbprint = (New-SelfSignedCertificate -Type Custom -Subject "$certificateName"-KeyUsage DigitalSignature -KeyAlgorithm RSA -KeyLength 2048 -CertStoreLocation "Cert:\CurrentUser\My" -Provider "Microsoft Enhanced Cryptographic Provider v1.0" ).Thumbprint
$x509 = (Get-ChildItem -Path cert:\CurrentUser\My\$myCertthumbprint)
$password = Read-Host -Prompt "Please enter the certificate password." -AsSecureString
# Saving the self-signed cert and pfx (private key) in case it's needed later
Export-Certificate -cert $x509 -FilePath ".\$certificateName.cer"
Export-PfxCertificate -Cert $x509 -FilePath ".\$certificateName.pfx" …Run Code Online (Sandbox Code Playgroud)