相关疑难解决方法(0)

"尝试加载证书的私钥时,指定了无效的提供程序类型"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万
查看次数

如何为SSL上的双向身份验证的本地测试创建客户端证书?

我正在尝试在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中的证书存储区,但同样没有骰子.

有什么明显的东西我做错了吗?

iis-7 client-certificates ssl-certificate windows-7

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

指定的提供程序类型无效.CryptographicException

我试图从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)

powershell azure-keyvault

7
推荐指数
1
解决办法
1171
查看次数