gpt4 book ai didi

c# - IX509PrivateKey::C# 的导出方法

转载 作者:行者123 更新时间:2023-12-02 11:11:52 25 4
gpt4 key购买 nike

只是想知道使用过 Microsoft 证书注册 API 的人是否可以提供一些帮助。我正在尝试使用此处记录的 IX509PrivateKey::Export 方法:https://msdn.microsoft.com/en-us/library/windows/desktop/aa379006%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396

我调用此方法的 C# 代码如下所示:

privateKey.Export("BCRYPT_PRIVATE_KEY_BLOB", EncodingType.XCN_CRYPT_STRING_ANY);

不幸的是,这会返回一个错误:“参数不正确。 0x80090027”

该错误并不是很有帮助,因为我不确定哪个参数导致了问题,因为它们都使用 API 文档中指定的值。请注意,在调用此代码之前,私钥已被初始化、创建,并且可以通过此 API 成功用于生成 CSR。

我认为这可能与将 C# 字符串转换为可与非托管代码一起使用的 BSTR 类型的问题有关,因此我尝试了一些方法来测试这个理论,但运气不佳。我有一种感觉,错误本身可能是由 CNG NCryptExportKey 函数生成的,该函数记录在此处:https://msdn.microsoft.com/en-us/library/windows/desktop/aa376263%28v=vs.85%29.aspx?f=255&MSPPError=-2147217396 。如果可能的话,我想尝试避免像 P/Invoke 这样困惑/不安全的解决方案。

很高兴听到任何人的任何想法。如果我可以提供更多信息,请告诉我。

最佳答案

我遇到了完全相同的问题。对我来说,问题部分在于使用私钥的顺序,部分在于导出调用中使用正确的参数。我的解决方案如下所示:

  CX509PrivateKey privateKey = new CX509PrivateKey();
//these flags have to be set before the key is created-- they're read only afterward
privateKey.KeyUsage = X509PrivateKeyUsageFlags.XCN_NCRYPT_ALLOW_ALL_USAGES;
privateKey.ExportPolicy = X509PrivateKeyExportFlags.XCN_NCRYPT_ALLOW_PLAINTEXT_EXPORT_FLAG;
privateKey.Create();
//initialize a request using the private key
pkcs10.InitializeFromPrivateKey(X509CertificateEnrollmentContext.ContextUser, privateKey, templateName);
//export the key, using the correct export type and encoding (I used the default)
string exportedKey = privateKey.Export("PRIVATEBLOB");

请注意,传递给导出函数的参数是“PRIVATEBLOB”,据我所知,没有注意到。我找到了here .

关于c# - IX509PrivateKey::C# 的导出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50519861/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com