Создать CngKey из сертификата в магазине localmachine для использования с ECDsaCng (CngKey)?

Я пытался осмыслить ECDsaCng, CngKey и подписаться с действующим сертификатом EC. Сертификат выдается «Symantec Class 3 ECC 256 bit Extended Validation CA», имеет алгоритм подписи «sha256ECDSA», алгоритм хеширования подписи «sha256», параметры открытого ключа = «ECDSA_P256» и использование ключа = «Цифровая подпись ( 80) ».

Помимо ECDsaCng, я пробовал использовать JwtSecurityTokenHandler с сертификатом, но получаю исключение «алгоритм сертификата не поддерживается». Использование «стандартного» 2048-битного сертификата SSL с этим Работает нормально.

Что мне нужно сделать, так это подписать JWT с помощью ES256, и пока это работает только с использованием «случайно сгенерированного» 256-битного ключа с ECDsaCng, поэтому ответ на любой из этих вопросов действительно сделает меня счастливым:

  1. Как заказать действительный сертификат, который можно использовать с JwtSecurityTokenHandler для подписи ES256?

  2. Как мне создать CngKey из моего сертификата в магазине? (Закрытый ключ сертификата не экспортируется.)

  3. Есть ли другой способ подписаться с помощью ES256 и закрытого ключа сертификата, который нельзя экспортировать из магазина?

Практически любая помощь приветствуется!

С наилучшими пожеланиями,

Хенрик


person Henrik N.    schedule 26.02.2014    source источник
comment
Тебе с этим повезло?   -  person Dan Turner    schedule 31.03.2014
comment
И да и нет. Мне пришлось использовать локально сгенерированную пару закрытых / открытых ключей. Моя рабочая теория на данный момент заключается в том, что сертификат SSL (любого типа) не может использоваться для подписи в Microsoft Cng, поскольку это, по-видимому, требует, чтобы сертификаты не имели одновременно использования ключей аутентификации сервера и подписи кода. Сертификат для подписи должен содержать ТОЛЬКО ключ для подписи кода.   -  person Henrik N.    schedule 31.03.2014


Ответы (1)


.NET 4.6.1 добавил значительно лучшую поддержку для выполнения ECDSA. В частности, Метод GetECDsaPrivateKey (расширение).

Поскольку методы подписи и проверки относятся к базовому классу ECDsa (начиная с .NET 4.6.1), вам действительно не нужно работать напрямую с типом ECDsaCng, если вы не пытаетесь взаимодействовать с именованными системными ключами или другими прямыми системное взаимодействие.

person bartonjs    schedule 12.08.2016