Я пытаюсь использовать X509Certificate в веб-сервисе ASP.NET в Облаке Rackspace. У меня есть чувство хранилища сертификатов на облачных узлах, возможно, вызывающих проблемы. Мне также связали вопрос с этим за исключением того, что я получаю в SslStream. Исключение AuthenticateAsClient при использовании iPhone Apple Push Notification Provider (apns-резкий) C#
В рамках apns-резкого проекта я использовал следующий код:
certificate = new X509Certificate2(p12File)
Однако я получил исключение, и изменение кода к следующему разрешило исключение X509Certificate2. Новый код следующие:
certificate = new X509Certificate2(p12File, String.Empty, X509KeyStorageFlags.MachineKeySet);
Я хотел бы знать, могу ли я использовать X509Certificate2 в рамках ASP.NET, не используя хранилище сертификатов? Хранилища сертификатов вызвали бы проблемы с Облачными узлами Rackspace?
Обновление № 1, Rackspace говорят мне, что доступ к Локальному Хранилищу сертификатов Машины не разрешен. Там какой-либо другой путь состоит в том, чтобы обойти использование хранилища сертификатов? Возможно, пользуясь сторонней библиотекой?
Причина, по которой первый конструктор не работает, является то, что ASP.NET не загружает магазин профиля пользователя, который является хранилищем по умолчанию, если вы не укажете местоположение хранения с использованием X509KeyStorageFlags
. Тем не менее, магазин машины всегда загружается ASP.NET, поэтому работает второй конструктор.
Я предполагаю, что вы намереваетесь использовать закрытый ключ в сертификате для шифрования или создания цифровых подписей (HASHING), в этом случае вы не можете избежать использования хранилища сертификата, поскольку закрытые ключи могут быть доступны только в программном обеспечении. Сертификаты, а не непосредственно из блоб или файлов.
Я не думаю, что магазин сертификата используется, если данные сертификата содержит только открытый ключ (поскольку нет конфиденциальных данных для защиты) - я заметил, что мне нужно только указать магазин, когда я собираюсь Работайте с сертификатами, которые содержат закрытый ключ.
Я не могу прокомментировать ситуацию в стойке пространства, хотя - могут возникнуть проблемы с импортными сертификатами в коде, работающем в частично доверенной среде, поскольку загрузка контейнера для частного ключа требует конкретных разрешений, которые не могут быть предоставлены вашей сборке.
Я импортировал X509Certificate2 из файла, и с помощью этого кода у меня есть как закрытый, так и открытый ключ:
X509Certificate2 cert = new X509Certificate2();
// Key Location: the physical file location (C:\cert.pfx)
// Key Password: the password for the certificate
cert.Import(keyLocation, keyPassword, X509KeyStorageFlags.Exportable);
По моему опыту, ключом к его работе был X509KeyStorageFlags.Exportable. Без этого я не мог получить доступ к закрытому ключу.