Wie kann ich das Objekt RSACryptoServiceProvider
mithilfe einer privaten RSA-Schlüsseldatei ordnungsgemäß erstellen? I erzeugt einen privaten RSA-Schlüssel und exportiert sie in eine p12-Datei auf OSX die Methoden verwenden:Erstellen Sie das RSACryptoServiceProvider-Objekt mithilfe der privaten RSA-Schlüsseldatei in C#
openssl genrsa -out rsakey.pem 2048
openssl pkcs12 -export -out rsakey.p12 -inkey rsakey.pem -nocerts
In meinem C# -Code, der auf einem Windows-Laptop läuft, erhalte ich einen Fehler versuchen, so das X509Certificate2
Objekt zu instanziiert dass ich den privaten Schlüssel als RSACryptoServiceProvider
Objekt aus ihm heraus greifen:
var privateKey = new X509Certificate2(p12_file, "pass", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
Cryptographic: der Parameter ist falsch.
Unten ist der gesamte C# -Code als Referenz. Beachten Sie, dass ich gerade versuche, den privaten Schlüssel als RSACryptoServiceProvider-Objekt abzurufen, indem ich die Dokumente für die Klasse befolge.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Security;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Globalization;
using Jose;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string p12_file = @"C:\Root\rsakey.p12";
DateTime issued = DateTime.Now;
DateTime expire = DateTime.Now.AddHours(10);
var payload = new Dictionary<string, object>()
{
{ "iss", "auth0_user"},
{ "exp", ToUnixTime(expire).ToString() }
};
var privateKey = new X509Certificate2(p12_file, "pass", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
string token = Jose.JWT.Encode(payload, privateKey, JwsAlgorithm.RS256);
Console.WriteLine(token);
}
static long ToUnixTime(DateTime dateTime)
{
return (int)(dateTime.ToUniversalTime().Subtract(new DateTime(1970, 1, 1))).TotalSeconds;
}
}
}
UPDATE: Ich habe versucht, meine selbst signiertes Zertifikat
openssl req -key rsakey.pem -new -out domain.crt
mit zu erstellen und sie dann in eine p12 Verpackung:
openssl pkcs12 -export -out rsakey.p12 -in rsakey.pem -certfile domain.crt
aber der Befehl hängt nur ewig, bis ich töten es.
Vielen Dank für Ihren Rat. Wie erreiche ich eine dieser Optionen? Ich bin damit nicht vertraut. – FullStack
Selbstparsing würde beinhalten, die passenden RFCs zu finden, um die Datenstrukturen zu finden, und anschließend DER dekodieren. Eine 3rd-Party-Bibliothek ist eine ziemlich weite offene Fläche. Aber die einfachste Lösung ist 'openssl req -new -x509 -key rsakey.pem -out selfsigned.cer' (und akzeptiere einfach alle Standardwerte, wenn du dazu aufgefordert wirst). (und ersetzen Sie "-nocerts" durch "-in selfsigned.cer" in Ihrer .p12-Erstellung). Rufen Sie dann 'GetRSAPrivateKey()' oder 'GetRSAPublicKey()' auf dem Zertifikat auf. – bartonjs
Ich habe verschiedene Varianten ausprobiert, aber das funktioniert schließlich. Vielen Dank – FullStack