Я пытаюсь создать CngKey
in. NET 4.7.2 из файла PEM, чтобы я мог подписать Apple-токен JWT авторизации.
В dev все работало нормально, но когда Я развернулся на стадии подготовки. При вызове CngKey.Import()
мне встретилась «ошибка файла не найдена». Конечно. Приложение работает под некоторым пользователем пула приложений IIS без структуры пользовательского каталога для ОС, в которой хранятся ключи.
С тех пор я пытался использовать CngKey.Create()
для импорта ключа на уровне компьютера, но Я продолжаю получать следующую бесполезную ошибку:
System.Security.Cryptography.CryptographicException: 'The requested operation is not supported.'
This exception was originally thrown at this call stack:
System.Security.Cryptography.NCryptNative.SetProperty(Microsoft.Win32.SafeHandles.SafeNCryptHandle, string, byte[], System.Security.Cryptography.CngPropertyOptions)
System.Security.Cryptography.CngKey.SetKeyProperties(Microsoft.Win32.SafeHandles.SafeNCryptKeyHandle, System.Security.Cryptography.CngKeyCreationParameters)
System.Security.Cryptography.CngKey.Create(System.Security.Cryptography.CngAlgorithm, string, System.Security.Cryptography.CngKeyCreationParameters)
SigningTest.Program.MachineKey() in Program.cs
SigningTest.Program.Main() in Program.cs
Вот мой текущий код:
var keyParameters = new CngKeyCreationParameters
{
ExportPolicy = CngExportPolicies.AllowPlaintextExport,
KeyCreationOptions = CngKeyCreationOptions.MachineKey,
KeyUsage = CngKeyUsages.AllUsages,
Provider = CngProvider.MicrosoftSoftwareKeyStorageProvider,
UIPolicy = new CngUIPolicy(CngUIProtectionLevels.None)
};
// KeyMeat is the part of the PEM file between "-----BEGIN PRIVATE KEY-----" and "-----END PRIVATE KEY-----"
var keyBytes = Convert.FromBase64String(KeyMeat);
keyParameters.Parameters.Add(new CngProperty(
CngKeyBlobFormat.GenericPrivateBlob.Format,
keyBytes,
CngPropertyOptions.None)
);
var privateKey = CngKey.Create(CngAlgorithm.ECDsaP256, "someName", keyParameters);
Обратите внимание, что ошибка возникает в CngKey.Create()
, но только когда keyParameters.Parameters.Add()
нет закомментировано.