x509certificate2 中的空私钥
Empty PrivateKey in x509certificate2
我已经使用私钥在本地机器商店 (win7) 上安装了证书。
在 C# 代码中,我这样做了:
X509Certificate2 cert = null;
var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
var result = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
cert = result.Count > 0
? result[0]
: null;
}
finally
{
store.Close();
}
return cert;
在 cert 变量中,我有我的证书,但它有问题:HasPrivateKey 为真,但 PrivateKey 没有任何对象。如果我在我的 Web 应用程序的 C# 代码中使用 REST 请求发送它,我有错误:
AcquireCredentialsHandle() failed with error 0X8009030D.
The request was aborted: Could not create SSL/TLS secure channel.
商店中的证书已授予所有权利。请帮忙看看,有什么问题吗?
俄语的 Certutil 结果(我用“***”隐藏了安全信息):
certutil -store my "cf 35 63 34 14 30 a0 32 ca 4a 58 b9 7a 7a ab 18 a4 47 7d a4"
================ Сертификат 0 ================
Серийный номер: 100030
Поставщик: ******************************
NotBefore: 07.07.2015 5:00
NotAfter: 24.12.2023 4:59
Субъект: ********************************
Не корневой сертификат
Шаблон:
Хеш сертификата(sha1): cf 35 63 34 14 30 a0 32 ca 4a 58 b9 7a 7a ab 18 a4 47 7d a4
Контейнер ключа = 94c3b04b44d51674a1b7de89c10bd7d7_09614f03-cc81-44e6-a978-81773242876c
Простое имя контейнера: CertReq-ceda22d5-2893-496a-b8c1-5c9ceaed82f1
Поставщик = Microsoft Strong Cryptographic Provider
Тест шифрования пройден
我已经解决了这个问题。我从机器存储中删除了证书,然后将已安装的证书从当前用户存储导出到 .pfx 文件并将其导入机器存储。现在 PrivateKey 有对象了。
再一步,我将协议类型从 Tls 更改为 Tls12(适用于 Win7+):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
我已经使用私钥在本地机器商店 (win7) 上安装了证书。 在 C# 代码中,我这样做了:
X509Certificate2 cert = null;
var store = new X509Store(storeName, storeLocation);
store.Open(OpenFlags.ReadOnly);
try
{
var result = store.Certificates.Find(X509FindType.FindByThumbprint, thumbprint, false);
ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
cert = result.Count > 0
? result[0]
: null;
}
finally
{
store.Close();
}
return cert;
在 cert 变量中,我有我的证书,但它有问题:HasPrivateKey 为真,但 PrivateKey 没有任何对象。如果我在我的 Web 应用程序的 C# 代码中使用 REST 请求发送它,我有错误:
AcquireCredentialsHandle() failed with error 0X8009030D.
The request was aborted: Could not create SSL/TLS secure channel.
商店中的证书已授予所有权利。请帮忙看看,有什么问题吗?
俄语的 Certutil 结果(我用“***”隐藏了安全信息):
certutil -store my "cf 35 63 34 14 30 a0 32 ca 4a 58 b9 7a 7a ab 18 a4 47 7d a4"
================ Сертификат 0 ================
Серийный номер: 100030
Поставщик: ******************************
NotBefore: 07.07.2015 5:00
NotAfter: 24.12.2023 4:59
Субъект: ********************************
Не корневой сертификат
Шаблон:
Хеш сертификата(sha1): cf 35 63 34 14 30 a0 32 ca 4a 58 b9 7a 7a ab 18 a4 47 7d a4
Контейнер ключа = 94c3b04b44d51674a1b7de89c10bd7d7_09614f03-cc81-44e6-a978-81773242876c
Простое имя контейнера: CertReq-ceda22d5-2893-496a-b8c1-5c9ceaed82f1
Поставщик = Microsoft Strong Cryptographic Provider
Тест шифрования пройден
我已经解决了这个问题。我从机器存储中删除了证书,然后将已安装的证书从当前用户存储导出到 .pfx 文件并将其导入机器存储。现在 PrivateKey 有对象了。 再一步,我将协议类型从 Tls 更改为 Tls12(适用于 Win7+):
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;