Вопрос по pfx, c#, x509certificate – «Произошла внутренняя ошибка.» При загрузке файла pfx с X509Certificate2

73

m пытается использовать самоподписанный сертификат (c #):

X509Certificate2 cert = new X509Certificate2(
    Server.MapPath("~/App_Data/myhost.pfx"), "pass");

на сервере общего веб-хостинга, и я получил ошибку:

System.Security.Cryptography.CryptographicException: An internal error occurred.

трассировка стека заканчивается

System.Security.Cryptography.CryptographicException.
    ThrowCryptogaphicException(Int32 hr) +33
System.Security.Cryptography.X509Certificates.X509Utils.
    _LoadCertFromFile(String fileName, IntPtr password, UInt32 dwFlags, 
        Boolean persistKeySet, SafeCertContextHandle& pCertCtx) +0
System.Security.Cryptography.X509Certificates.X509Certificate.
    LoadCertificateFromFile(String fileName, Object password, 
        X509KeyStorageFlags keyStorageFlags) +237
System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(
    String fileName, String password) +131

На моей машине разработчика он загружается нормально. Причина, по которой я загружаю * .pfx, а не * .cer-файл, потому что мне нужен доступ с закрытым ключом (cer-файл загружается нормально). Я сделал pfx на моем dev mochine так:

makecert -r -n "CN=myhost.com, [email protected]" -sky exchange -b 01/01/2009
    -pe -sv myhost.pvk myhost.cer
pvk2pfx -pvk myhost.pvk -spc myhost.cer -pfx myhost.pfx -po pass

Я использую версию v5.131.3790.0 от makecert

Я получаю сообщение об ошибкеthe system cannot find the file specified, Ответ @Randy Levy работал на меня! Jess
Возможно, эта статья может помочь:codeproject.com/KB/WCF/wcfcertificates.aspx Emmanuel

Ваш Ответ

2   ответа
10

Я пробовал рэндиS решение изменить его на MachineKeySet, но затем получил сообщение об ошибке: "

ключ недействителен для использования в указанном состоянии "

Так что после небольшого поиска я нашел сообщение, в котором предлагалось изменить его на:

var certificate = new X509Certificate2(certKeyFilePath, passCode, 
X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet |       
X509KeyStorageFlags.PersistKeySet );

и это решило мои проблемы.

У меня нетЕще не попробовал предложение изменить настройку пула приложений в конфигурации IIS. Для этого перейдите в Расширенные настройки для вашего сайта.затем установите пул приложенийзагрузить профиль пользователя " к истине. Когда этот параметр имеет значение false, ключевые контейнеры неТ, очевидно, доступны.

Я тоже, большое, большое спасибо ndesorden
Я получил вышеупомянутую ошибку, и ваше решение помогло ее устранить. благодарю вас. Mohan Gundlapalli
137

Используйте локальный компьютерный магазин для закрытого ключа:

X509Certificate2 cert = new X509Certificate2("myhost.pfx", "pass",
    X509KeyStorageFlags.MachineKeySet);

MachineKeySet описывается какзакрытые ключи хранятся в локальном компьютерном магазине, а не в текущем пользовательском магазине », По умолчанию без флагов - размещение в хранилище пользователя.

Даже если вы читаете сертификат с диска и сохраняете его в объекте, закрытые ключи все еще хранятся в базе данных ключей поставщика криптографических служб Microsoft Cryptographic. На хост-сервере процесс ASP.NET не имеет разрешения на доступ к хранилищу пользователей.

Другой подход (согласно некоторым комментариям ниже) заключается в изменении конфигурации IIS или удостоверения пула приложений, которые работают. Однако это предполагает, что имеется доступ к этим элементам конфигурации, что может быть не так (например, в среде общего хостинга).

И для более быстрой проверки исправлений / обходных путей:stackoverflow.com/questions/9951729/... Ciprian Teiosanu
Действительно, все, что нужно было сделать, это установить параметр X509KeyStorageFlags.MachineKeySet. Это'Очень грустно, что исключение просто "Возникла внутренняя ошибка." Не очень полезно. Nicholi
да, это помогает, спасибо. не могли бы вы объяснить, почему? документы ничего полезного не говорит. tmp3128
Ты спас мой день. Как ни странно, он работал на моей машине до обновления решения до .NET 4.0 Marc Climent

Похожие вопросы