2015-09-04 6 views
1

Я пытаюсь загрузить сертификат с закрытым ключом из файла pfx и импортировать его в хранилище сертификатов LocalMachine/My (Personal). Мой код работает отлично, за исключением того, когда я осматриваю сертификат в магазине он говоритНе удается импортировать сертификат pfx с закрытым ключом для хранения из .net C# 3.5 на сервере Windows 2012

«Связанный закрытый ключ не может быть найден»

и дальше, Certutil говорит

«Не удается найти сертификат и закрытый ключ для дешифрования "

Странная часть заключается в том, что мой код отлично работает в окне разработки Windows 7, но не на Windows Server 2008 R2 или в 2012 году. Также странно, что если я вручную импортирую файл pfx с помощью mmc, частный ключ, похоже, сохраняется должным образом.

Вот код, я использую, чтобы загрузить файл и импорт:

// load the certificate from pfx file 
X509Certificate2 cert = new X509Certificate2(filePath, pfxPassword, X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet); 

// import to the store 
X509Store store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadWrite); //tried MaxAllowed as well 
store.Add(caCert); 
store.Close(); 

Любые идеи? Для получения дополнительной информации я также генерирую сертификат в коде на более раннем этапе, используя BouncyCastle. На этом этапе я столкнулся с некоторыми проблемами, сохраняющими закрытый ключ, но был решен с ответа от this question. Также код, который пытается импортировать, работает как администратор.

+0

См. Этот ответ, http://stackoverflow.com/questions/749654/associate-private-key-to-certificate-for-pfxexportcertstoreex – Raj

+0

@Raj благодарит за указатель, но я явно не работаю с CryptoAPI на момент. Мне интересно, есть ли способ сделать это, используя C# System.Security.Cryptography.X509Certificates или связанные пространства имен ... – rusty

ответ

0

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

C:\ProgramData\Microsoft\Crypto\RSA\MachineKeys
и обнаружил, что файл не имеет владельца и никаких разрешений не установлен (даже для администраторов или системы). Изменение этих разрешений вручную вызвало сообщение «связанного закрытого ключа» при просмотре сертификата в магазине.

Это привел меня изменить мой код, чтобы установить разрешения на секретном ключе, прежде чем пытаться импортировать его в хранилище: https://stackoverflow.com/a/4902009/332610

ура!