2014-11-22 9 views
1

У меня есть сертификат, который я могу установить из ключа. Когда я просматриваю этот установленный сертификат с помощью IE. Он показывает, что у него есть закрытый ключ, как показано ниже.Сертификат pfx с закрытым ключом ...?

enter image description here

Но когда я пытаюсь экспортировать этот сертификат .PFX с помощью моих C# код, секретный ключ является недействительным.

ниже мой код для экспорта сертификата PFX, где закрытый ключ всегда нулевой

public static bool ExportCertificateToPFX(string certificateSerialNumber, string pxfFilepath, StoreName storeName, StoreLocation location) 
{ 
    bool success = false; 

    X509Store store = new X509Store(storeName, location); 
    store.Open(OpenFlags.ReadOnly); 
    X509Certificate2Collection certs = store.Certificates.Find(X509FindType.FindBySerialNumber, certificateSubject, true); 

    if (certs != null && certs.Count > 0) 
    { 
     //BELOW CONDITION ALWAYS FALSE 
     if (certs[0].HasPrivateKey) 
     { 
      MessageBox.Show(certs[0].PrivateKey.ToString()); 
     } 
     byte[] data = certs[0].Export(X509ContentType.Pfx, "KALPESH"); 
     //HERE WRITE "data" TO "pxfFilepath" FILE 
    } 
    store.Close(); 


    return success; 
} 
+0

И где ваш код? –

+0

По всей вероятности, ключ не позволяет извлекать закрытый ключ. – Phylogenesis

+0

Хорошо, филогенез в этом случае - это любая возможность, я могу прочитать частный ключ и сертификат непосредственно из ключа с моим кодом. –

ответ

0

Есть два possibilites (начиная с менее вероятным):

закрытый ключ
  1. сертификата использует не подкрепленное .NET для хранения ключей. Например, Microsoft KSP или его собственный.
  2. Нет закрытого ключа. Вы можете запустить certutil -store с соответствующими параметрами (в зависимости от того, где установлен сертификат), чтобы проверить, есть ли закрытый ключ. Также эта команда дает вам ответ, если ключ использует неподдерживаемое хранилище ключей.
Смежные вопросы