Подтвердить что ты не робот

CryptographicException был необработанным: система не может найти указанный файл

Я пытаюсь охватить тайны SSL-общения и нашел отличный учебник по этот сайт. Я пытался проверить свой собственный сертификат. Используя Visual Studio 2012, я просто добавил существующий файл (мой сертификат в формате .pfx), а затем изменил настройки "сертификат" и "пароль" в app.config. Однако, пытаясь запустить его, я получил сообщение об ошибке:

CryptographicException не обрабатывается: система не может найти указанный файл

Затем я попробовал то же самое в своей веб-службе. Там я получил дополнительную информацию об ошибке:

System.Security.Cryptography.CryptographicException: System cannot find specified file.

   at System.Security.Cryptography.CryptographicException.ThrowCryptogaphicException(Int32 hr)
   at System.Security.Cryptography.X509Certificates.X509Utils._QueryCertFileType(String fileName)
   at System.Security.Cryptography.X509Certificates.X509Certificate.LoadCertificateFromFile(String fileName, Object password, X509KeyStorageFlags keyStorageFlags)
   v System.Security.Cryptography.X509Certificates.X509Certificate2..ctor(String fileName, String password)
   v TestServer.DataService.LoadSoap() v c:\Users\Administrator\Documents\Visual Studio 2012\Projects\TestServer\TestServer\DataService.asmx.cs:line 48

Я написал этот вопрос автору статьи, но поскольку его последний ответ был в марте 2012 года, я не уверен, ответит ли он. Если бы кто-то помог мне с этой проблемой, я был бы очень благодарен.

P.S.: При экспорте сертификата из .cer в .pfx я изменил заголовок экспортированного файла. Хотя я сомневаюсь в его влиянии на проблему, я бы предпочел упомянуть ее.

4b9b3361

Ответ 1

Вы установили следующее в пуле приложений в IIS?

  • Перейдите в диспетчер IIS
  • Перейти к экземпляру пула приложений
  • Нажмите дополнительные настройки
  • В разделе "Модель процесса" установите "Загрузить профиль пользователя" на "истина"

См. этот вопрос в стеке для дальнейшего чтения: Что именно происходит, когда я устанавливаю LoadUserProfile пула IIS?

Ответ 2

Для тех из вас, кто получил криптографическое исключение при попытке импортировать X509Certificate2 с использованием метода импорта, я обнаружил, что использование параметра Enum для MachineKeySet обошли необходимость создания userContext в IIS и, следовательно, его проще реализовать.

X509Certificate2 cert = new X509Certificate2();
cert.Import(certificateFilePath, certPasshrase, 
X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.MachineKeySet);

Ответ 3

Поскольку этот вопрос имеет высокий рейтинг поиска, я хотел бы представить способ представления X509Certificate2 с абсолютным путем (который он принимает) только к относительно расположенному ключевому файлу pxf в приложении ASP.net.

    string path = HttpContext.Current.Server.MapPath("~") + "..\keys\relative_key.pfx";

    X509Certificate2 cert = new X509Certificate2(path, "", X509KeyStorageFlags.DefaultKeySet);

Ответ 4

Передав CspParameters с флагом csdMachineKeyKeyStore, IIS может обойти ограничение, которое выдает исключение.

CspParameters cspParams = new CspParameters();
cspParams.KeyContainerName = Guid.NewGuid().ToString().ToUpperInvariant();
cspParams.Flags = CspProviderFlags.UseMachineKeyStore;
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspParams);

Я нашел решение здесь:

Ссылка на информационный ресурс

Ответ 5

Вам нужно указать абсолютный путь вместо относительного пути.

AppDomain.CurrentDomain.BaseDirectory +"/Certificate/cer.PFX"