Я могу использовать X509Certificate2 в рамках ASP.NET, не используя хранилище сертификатов?

Я пытаюсь использовать 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 говорят мне, что доступ к Локальному Хранилищу сертификатов Машины не разрешен. Там какой-либо другой путь состоит в том, чтобы обойти использование хранилища сертификатов? Возможно, пользуясь сторонней библиотекой?

7
задан Community 23 May 2017 в 12:16
поделиться

2 ответа

Причина, по которой первый конструктор не работает, является то, что ASP.NET не загружает магазин профиля пользователя, который является хранилищем по умолчанию, если вы не укажете местоположение хранения с использованием X509KeyStorageFlags . Тем не менее, магазин машины всегда загружается ASP.NET, поэтому работает второй конструктор.

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

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

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

4
ответ дан 7 December 2019 в 12:20
поделиться

Я импортировал 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. Без этого я не мог получить доступ к закрытому ключу.

1
ответ дан 7 December 2019 в 12:20
поделиться
Другие вопросы по тегам:

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