Скорее всего, когда вы работаете из Visual Studio / Cassini, он обращается к вашему пользовательскому хранилищу сертификатов, даже если вы загружаете его из байтов.Не могли бы вы попробовать это и посмотреть, решит ли это вашу проблему:
var certificate = new X509Certificate(
cert.CertificatePKCS12, "SomePassword", X509KeyStorageFlags.MachineKeySet);
Это заставит IIS (который работает как пользователь ASP.NET, который, вероятно, не имеет доступа к хранилищу пользователей) использоватьМашинный магазин.
Эта страница объясняет конструктор более подробно, а эта страница объясняет перечисление X509KeyStorageFlags
.
Редактировать: Исходя из второй ссылки из cyphr , похоже, что это может быть хорошей идеей (если предыдущее решение не работает) объединить некоторые из FlagsAttribute
перечислимые значения примерно так:
var certificate = new X509Certificate(
cert.CertificatePKCS12, "SomePassword",
X509KeyStorageFlags.MachineKeySet
| X509KeyStorageFlags.PersistKeySet
| X509KeyStorageFlags.Exportable);
Кроме того, если у вас есть доступ, вы можете попробовать изменить настройку пула приложений для использования LocalService (а затем перезапустить AppPool).Это может повысить ваши права доступа до соответствующего уровня, если в этом проблема.
Наконец, вы можете использовать File.WriteAllBytes
, чтобы записать содержимое CertificatePKCS12
в файл pfx и посмотреть,Вы можете вручную импортировать его, используя консоль сертификатов в MMC (вы можете удалить после успешного импорта; это просто для проверки).Возможно, ваши данные обманывают или неверный пароль.