Подпишите строку с RSA SHA 256 ТОЛЬКО закрытым ключом в виде строки .NET - PullRequest
0 голосов
/ 09 октября 2018

Мы осуществляем интеграцию с Google через RESTful API, и мне нужно подписать полезную нагрузку JWT с помощью RSA-SHA256, и все, что у меня есть, - это закрытый ключ в виде строки, который выглядит как

-----BEGIN PRIVATE KEY-----
MIIEvgIBfADANBg9qhkdsiG9w0BAQEFAASCBKgw
......
-----END PRIVATE KEY-----

Я всюду искал решение, но все говорят о X509Certificate2, для которого нужен файл p12 или несколько сертификатов.Теперь у меня нет ни одного из них, у меня есть только строка, которая является закрытым ключом.

Google рекомендует https://jwt.io/, и он работает со строкой ключа, но мне нужен мой КОДсделать это.На странице перечислены 3 библиотеки:

  1. Одна из них принадлежит Microsoft и не имеет абсолютно никакой документации.
  2. Другая использует X509Certificate2 или специально для строковых ключей имеетссылка на это место http://www.donaldsbaconbytes.com/2016/08/create-jwt-with-a-private-rsa-key/, в которой используются некоторые файлы сертификатов, которых у меня нет, что делает ее неправильной и бесполезной ссылкой для начала.
  3. У тех же создателей # 2 есть еще одна библиотека, но онадля телефонов, и у него действительно есть метод для подписи RSA256, который принимает закрытый ключ как строку точно моего формата.

Итак, мой вопрос - есть ли какое-то рабочее решение для моего случая?Потому что я не могу поверить, что ни у кого больше нет интеграции с Google.

1 Ответ

0 голосов
/ 09 октября 2018

Я знаю способ конвертировать его в pfx, который вы можете использовать в C #.

Сначала установите OpenSSL, если вы этого еще не сделали.(Вы можете получить последнюю версию "Win64 OpenSSL v #. #. # X Light" от http://slproweb.com/products/Win32OpenSSL.html,, хотя я не несу ответственности за этот источник.)

Возможно, вы захотите добавить "C: \Запрограммируйте файлы \ OpenSSL \ bin \ "на переменную пути вашей учетной записи, чтобы можно было использовать« openssl.exe »из любой точки командной строки.

В окне командной строки перейдите к папке, в которой находится файл закрытого ключа.,Давайте назовем это «priv.key».Выполните следующие две команды, игнорируя комментарии:

# Create public self-signed certificate CRT file (with 7000yr validity) from private key (may leave all info empty)
openssl req -x509 -sha256 -new -key priv.pem -out pub.crt -days 2555000

# Combine into PFX container (encrypted with AES-256) (certificate needs to be included for .NET to read successfully)
openssl pkcs12 -export -aes256 -CSP "Microsoft Enhanced RSA and AES Cryptographic Provider" -inkey priv.pem -in pub.crt -out priv.pfx

Обратите внимание, что в последней команде я создаю зашифрованный pfx (это необязательно - я полагаю, вы могли бы заменить -aes256 на -nodes напропустите его), и я настраиваю провайдера шифрования так, чтобы ключ мог использоваться для операций SHA256 без жалоб на C #.

Теперь у вас есть файл pfx, который можно загрузить с помощью конструктора X509Certificate2.

Я склонен использовать этот шпаргалку для общих команд OpenSSL: https://www.sslshopper.com/article-most-common-openssl-commands.html

...