如何从商店导出不可导出的私钥

时间:2010-10-12 12:54:09

标签: .net encryption bouncycastle rsacryptoserviceprovider

我需要从Windows商店导出私钥。如果密钥被标记为不可导出,我该怎么办?我知道有可能,程序越狱可以导出这个密钥。

要导出密钥,我使用从Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair()导出密钥的(RSACryptoServiceProvider)cryptoProv.ExportParameters(true)。我在Org.BouncyCastle.Cms.CmsSignedDataGenerator中使用导出的密钥进行CMS签名。

我需要.Net的解决方案,但任何解决方案都会有用。谢谢。

9 个答案:

答案 0 :(得分:42)

你是对的,根本没有API我知道导出标记为不可导出的PrivateKey。 但是如果你修补(在内存中)正常的API,你可以使用正常的方式导出:)

还有一个新版本的mimikatz也支持CNG Export(Windows Vista / 7/2008 ......)

  1. 下载(并使用管理权限启动):http://blog.gentilkiwi.com/mimikatz(主干版本或最新版本)
  2. 运行它并在其提示符中输入以下命令:

    1. privilege::debug(除非您已经拥有它或仅定位CryptoApi)
    2. crypto::patchcng(nt 6)和/或crypto::patchcapi(nt 5& 6)
    3. crypto::exportCertificates和/或crypto::exportCertificates CERT_SYSTEM_STORE_LOCAL_MACHINE
    4. .pfx文件受密码保护“mimikatz”

答案 1 :(得分:15)

Gentil Kiwi的answer是正确的。他开发了这个mimikatz工具,可以检索不可导出的私钥。

但是,他的指示已经过时了。你需要:

  1. https://github.com/gentilkiwi/mimikatz/releases

  2. 下载最新版本
  3. 在请求证书的同一台计算机上运行具有管理员权限的cmd

  4. 更改为mimikatz bin目录(Win32或x64版本)

  5. 运行mimikatz

  6. 关注wiki instructions,.pfx文件(受密码 mimikatz 保护)将被放置在mimikatz bin的同一文件夹中

  7.   

    mimikatz#crypto :: capi
      本地CryptoAPI修补

         

    mimikatz#privilege :: debug
      特权'20'确定

         

    mimikatz#crypto :: cng
      “KeyIso”服务打补丁

         

    mimikatz #crypto :: certificates / systemstore:local_machine / store:my   /出口
       *系统存储:'local_machine'(0x00020000)
       *商店:'我的'

         
        
    1. example.domain.local
        密钥容器:example.domain.local
        提供商:Microsoft软件密钥存储提供商
        键入:CNG键(0xffffffff)
        可出口钥匙:否
        钥匙尺寸:2048
        公共出口:好的 - 'local_machine_my_0_example.domain.local.der'
        私人出口:好的 - 'local_machine_my_0_example.domain.local.pfx'
    2.   

答案 2 :(得分:13)

我想特别提及Jailbreak GitHub

  

越狱

     

Jailbreak是一种用于导出标记为的证书的工具   从Windows证书存储区无法导出。这有助于何时   您需要提取证书以进行备份或测试。你必须有   完全访问文件系统上的私钥以便   越狱工作。

     

先决条件:Win32

答案 3 :(得分:1)

不幸的是,上面提到的工具被几家防病毒供应商阻止了。如果是这种情况,请查看以下内容。

在证书库中打开不可导出的证书,然后找到“指纹”值。

接下来,打开regedit到下面的路径,找到与指纹值匹配的注册表项。

注册表项的导出将包含完整的证书,包括私钥。导出后,将导出复制到其他服务器并将其导入注册表。

证书将出现在证书管理器中,并包含私钥。

计算机商店:HKLM \ SOFTWARE \ Microsoft \ SystemCertificates \ MY \ Certificates 用户商店:HKCU \ SOFTWARE \ Microsoft \ SystemCertificates \ MY \ Certificates

在紧要关头,您可以将导出保存为证书的备份。

答案 4 :(得分:0)

这在Windows Server 2012上对我有用 - 我需要导出一个不可导出的证书来设置另一个ADFS服务器,这就行了。请记住使用上面的越狱说明,即:

crypto :: certificates / export / systemstore:CERT_SYSTEM_STORE_LOCAL_MACHINE

答案 5 :(得分:0)

您可能需要卸载防病毒软件(就我而言,我必须摆脱Avast)。

这确保crypto::cng命令将起作用。否则会给我错误:

mimikatz $ crypto::cng
ERROR kull_m_patch_genericProcessOrServiceFromBuild ; OpenProcess (0x00000005)

删除Avast之后:

mimikatz $ crypto::cng
"KeyIso" service patched

魔术。 (:

顺便说一句

Windows Defender是另一个阻止程序运行的程序,因此至少在使用程序时,您还需要禁用它。

答案 6 :(得分:0)

对于控制台应用程序,here有可用的代码和二进制文件,可以导出标记为不可导出的私钥,而它的won't trigger antivirus应用程序如mimikatz可以导出。

该代码基于NCC Group的论文。 您需要使用本地系统帐户运行该工具,因为该工具可以直接写入Windows lsass进程使用的内存来工作,以便将密钥临时标记为可导出。可以使用SysInternals的PsTools中的PsExec

  1. 产生一个以本地系统用户身份运行的新命令提示符:

      

    PsExec64.exe -s -i cmd

  2. 在新命令提示符下,运行该工具:

      

    exportrsa.exe

  3. 该工具会提示您输入找到的每个密钥的密码-这是您要用来保护导出的PFX文件的密码,因此可以随便输入

答案 7 :(得分:0)

如果它是由 digicert 颁发的,您可以使用适用于 Windows 的 DigiCert 证书实用程序。在创建它的服务器上进行“修复”。然后您可以将其导出为类似 c:\temp 的 .pfx。这对我来说是一个真正的 ssl 证书。

答案 8 :(得分:-1)

我知道没有用于导出在创建时标记为“不可导出”的Windows私钥的API。可能会有各种各样的黑客,但他们的细节可能会在没有警告的情况下从系统的一个版本变为另一个版本。