Следующие строки кода, являющиеся частью консольного приложения .NET FW 4.6.2, выполняются без исключений при запуске на Windows 10. Но при работе на Windows Server 2016 это вызывает выброс CryptographicException
когда вызывается метод Export
, говоря: Keyset не существует (даже при работе от имени администратора).(При компиляции кода для .NET Core 2 он компилируется, но исполняемый файл выдает PlatformNotSupportedException
в первой строке.)
Certificate.PrivateKey = RSA;
byte[] Bin = Certificate.Export(X509ContentType.Pfx, password);
Справочная информация: Certificate
- это X509Certificate2
только с открытымключ.RSA
- это RSACryptoServiceProvider
, содержащий закрытый ключ, соответствующий тому же открытому ключу.Сертификат создается удаленным ACME-совместимым центром сертификации (Let's Encrypt), поэтому доступен только открытый ключ и секретный ключ хранится отдельно от клиента.
Код работает без исключения наWindows 10, и сгенерированный файл PFX содержит закрытый ключ, как и должно быть.
Вопрос: почему он выдает исключение в одном случае, а не в другом?И каким будет предлагаемый обходной путь?
Источник консольного приложения: https://github.com/PeterWaher/IoTGateway/tree/master/Utilities/Waher.Utility.Acme
Скомпилированная версия: https://waher.se/Downloads/Waher.Utility.Acme.zip
Параметры командной строки, чтобы повторитьСитуация: (замените EMAIL, DOMAIN и WEBFOLDER на соответствующие значения)
Waher.Utility.Acme.exe -let -ce EMAIL -a -nk -dns DOMAIN -dns www.DOMAIN -http WEBFOLDER -f Certificate -pwd Test -v
Следующее событие было зарегистрировано в журнале безопасности компьютера с Windows Server (хотя он работал нормально на компьютере с Windows 10):
Log Name: Security
Source: Microsoft-Windows-Security-Auditing
Date: 5/28/2018 6:56:27 PM
Event ID: 5061
Task Category: System Integrity
Level: Information
Keywords: Audit Failure
User: N/A
Computer: Domain
Description:
Cryptographic operation.
Subject:
Security ID: Domain\PeterWaher
Account Name: PeterWaher
Account Domain: Domain
Logon ID: 0xBFDEC
Cryptographic Parameters:
Provider Name: Microsoft Software Key Storage Provider
Algorithm Name: UNKNOWN
Key Name: Domain\PeterWaher
Key Type: User key.
Cryptographic Operation:
Operation: Open Key.
Return Code: 0x80090016