У меня есть этот вспомогательный метод:Создание самоподписанного сертификата в .NET, с помощью веб-приложения Azure (ASP.NET MVC 5)
CngKeyCreationParameters keyParams = new CngKeyCreationParameters();
keyParams.KeyCreationOptions = CngKeyCreationOptions.None;
keyParams.KeyUsage = CngKeyUsages.Signing;
keyParams.Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider;
keyParams.ExportPolicy = CngExportPolicies.AllowExport;
String newguid = Guid.NewGuid().ToString();
CngKey newKey = CngKey.Create(CngAlgorithm2.Rsa, keyParams);
...
Когда я отладки (локальный компьютер), все в порядке , но в производственной среде последнее предложение CngKey newKey = CngKey.Create(CngAlgorithm2.Rsa, keyParams);
выдает следующее исключение: «Система не может найти указанный файл».
Основная идея - создать самоподписанный сертификат (x509) для его хранения и использовать его для подписания документов PDF.
Update:
StackTrace (с помощью: CngKeyCreationOptions.None
):
[CryptographicException: The system cannot find the file specified.
]
System.Security.Cryptography.NCryptNative.CreatePersistedKey(SafeNCryptProviderHandle provider, String algorithm, String name, CngKeyCreationOptions options) +2244958
System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters) +248
StackTrace (с помощью: CngKeyCreationOptions.MachineKey
):
[CryptographicException: Access denied.
]
System.Security.Cryptography.NCryptNative.FinalizeKey(SafeNCryptKeyHandle key) +2243810
System.Security.Cryptography.CngKey.Create(CngAlgorithm algorithm, String keyName, CngKeyCreationParameters creationParameters) +266
Можем ли мы получить трассировку стека на этом исключении? Более подробная информация нужна пожалуйста. – Haney
Попробуйте установить 'CngKeyCreationOptions' на' MachineKey' вместо None. Я думаю, что Azure запускает вашу службу как учетную запись, у которой нет профиля пользователя, что означает, что нет криптохранилища. Вы также можете получить разрешение на использование с помощью набора машинных клавиш - веб-приложения azure могут не позволить вам использовать хранилище ключей. – vcsjones
спасибо! [CryptographicException: доступ запрещен. ] System.Security.Cryptography.NCryptNative.FinalizeKey (ключ SafeNCryptKeyHandle) +2243810 System.Security.Cryptography.CngKey.Create (CngAlgorithm алгоритм, String KEYNAME, CngKeyCreationParameters creationParameters) +266 – manolovalenzuela