Причина, по которой первый конструктор не работает, заключается в том, что ASP.NET не загружает хранилище профилей пользователей, которое является хранилищем по умолчанию, если вы не указали место хранения с помощью X509KeyStorageFlags
. Однако хранилище компьютеров всегда загружается ASP.NET, поэтому работает второй конструктор.
Я предполагаю, что вы намерены использовать закрытый ключ в сертификате для шифрования или создания цифровых подписей (хеширования), и в этом случае вы не можете избежать использования хранилища сертификатов, поскольку к закрытым ключам можно получить программный доступ только из импортированного сертификаты, а не напрямую из BLOB-объектов или файлов.
Я не думаю, что хранилище сертификатов используется, если данные сертификата содержат только открытый ключ (поскольку нет конфиденциальных данных для защиты) - я заметил, что мне нужно указывать хранилище компьютеров только тогда, когда я намереваюсь работать с сертификатами, которые содержат закрытый ключ.
Я не могу комментировать ситуацию в Rackspace - могут быть проблемы с импортом сертификатов в код, работающий в среде с частичным доверием, так как загрузка контейнера закрытого ключа требует определенных разрешений, которые могут не предоставляться вашей сборке.