有没有一种方法可以使用C#获得命令行certreq-accept的功能?

有没有一种方法可以使用C#获得命令行certreq-accept的功能?,c#,x509certificate2,C#,X509certificate2,我正在创建一个windows窗体应用程序,将证书导入本地存储-我希望能够做到的是在可能的情况下使其与现有私钥配对 我知道这是可能的,因为我可以在证书上手动使用certreq-accept命令,并且它可以很好地对证书进行配对 X509Certificate2 certificate = new X509Certificate2(fileName); X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachin

我正在创建一个windows窗体应用程序,将证书导入本地存储-我希望能够做到的是在可能的情况下使其与现有私钥配对

我知道这是可能的,因为我可以在证书上手动使用certreq-accept命令,并且它可以很好地对证书进行配对

X509Certificate2 certificate = new X509Certificate2(fileName);
X509Store certStore = new X509Store(StoreName.My, StoreLocation.LocalMachine);
certStore.Open(OpenFlags.ReadWrite);
certStore.Add(certificate);
certStore.Close();
代码工作得很好-只是与相应的私钥不匹配,我知道私钥是存在的,因为命令行certreq-accept导入它并与之匹配。如果有人知道如何使用代码(不在代码中运行命令行)匹配该功能,我将非常感谢您的指导


(旁注-获得certutil-repairstore的功能也会很好)

certreq-accept的流程是:

  • 打开请求存储(例如
    新建X509Store(“请求”,StoreLocation.LocalMachine)
  • 查找使用与已签名证书相同公钥的自签名证书(该证书由certreq创建)
  • 将私钥复制到新证书(例如,
    var-withKey=newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());
  • withKey
    证书添加到My store(CurrentUser或LocalMachine,以与密钥和自签名证书所在位置匹配的为准)
  • 从请求存储中删除
    requestCert

所有这些都可以用C#来解。对于“相同公钥”,最简单的方法是比较newCert.PublicKey和requestCert.PublicKey的Oid、EncodedKeyValue和EncodedParameters属性。

certreq-accept的流程是:

  • 打开请求存储(例如
    新建X509Store(“请求”,StoreLocation.LocalMachine)
  • 查找使用与已签名证书相同公钥的自签名证书(该证书由certreq创建)
  • 将私钥复制到新证书(例如,
    var-withKey=newCert.CopyWithPrivateKey(requestCert.GetRSAPrivateKey());
  • withKey
    证书添加到My store(CurrentUser或LocalMachine,以与密钥和自签名证书所在位置匹配的为准)
  • 从请求存储中删除
    requestCert

所有这些都可以用C#来解。对于“相同公钥”,最简单的方法是比较newCert.PublicKey和requestCert.PublicKey的Oid、EncodedKeyValue和EncodedParameters属性。

这有帮助吗?看起来有一些密钥存储标志:不这样认为,这看起来就像我导入了一个PFX(公钥+私钥),这和类似的文章是有帮助的。在这种情况下,我只想导入一个公钥,让它识别机器上存在一个私钥。这有帮助吗?看起来有一些密钥存储标志:不这样认为,这看起来就像我导入了一个PFX(公钥+私钥),这和类似的文章是有帮助的。在这种情况下,我只想导入一个公钥,让它识别机器上存在一个私钥。谢谢!等我有时间的话,我得测试一下,但这一切都是有道理的。有关于如何查看这些私钥的提示吗?我在商店里放了一块手表,创建了一个新的CSR,但在任何商店里都没有看到它们——它们去了不同的地方吗?@StevenHansen如果你通过certreq创建CSR/密钥,那么在一个名为“Request”的商店里应该有一个自签名证书(非常确定它是单数)。如果你是以其他方式创建的,那么无论这个过程是什么,都会决定事情的发展方向……谢谢!等我有时间的话,我得测试一下,但这一切都是有道理的。有关于如何查看这些私钥的提示吗?我在商店里放了一块手表,创建了一个新的CSR,但在任何商店里都没有看到它们——它们去了不同的地方吗?@StevenHansen如果你通过certreq创建CSR/密钥,那么在一个名为“Request”的商店里应该有一个自签名证书(非常确定它是单数)。如果你以其他方式创造它,那么无论这个过程是什么,都会决定事情的走向。。。