Добавление закрытого ключа в сертификат только с открытым ключом на Windows Server в .NET - PullRequest
0 голосов
/ 28 мая 2018

Следующие строки кода, являющиеся частью консольного приложения .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
...