RSA 비공개 키 파일을 사용하여 RSACryptoServiceProvider
객체를 올바르게 만들려면 어떻게해야합니까? 나는 RSA 개인 키를 생성 방법을 사용하여 OSX에 P12 파일로 내보내기 : 윈도우 노트북에서 실행 내 C# 코드에서는 C# RSA 비공개 키 파일을 사용하여 RSACryptoServiceProvider 객체 만들기
openssl genrsa -out rsakey.pem 2048
openssl pkcs12 -export -out rsakey.p12 -inkey rsakey.pem -nocerts
, 나는 그렇게
X509Certificate2
개체를 인스턴스화하는 동안 오류를 얻고있다 나는 그것의를 벗어난
RSACryptoServiceProvider
객체와 개인 키를 잡아 수 :
var privateKey = new X509Certificate2(p12_file, "pass", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.MachineKeySet).PrivateKey as RSACryptoServiceProvider;
CryptographicException를 :이 매개 변수가 잘못되었습니다.
다음은 참조 용 전체 C# 코드입니다. 단지 X509Certificate2 클래스에 대한 문서를 따라 RSACryptoServiceProvider 객체로 개인 키를 가져 오려고합니다.
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 :
openssl pkcs12 -export -out rsakey.p12 -in rsakey.pem -certfile domain.crt
하지만 명령이 그냥 죽일 때까지 영원히 응답 : 나는 P12로 포장 한 후
openssl req -key rsakey.pem -new -out domain.crt
과를 사용하여 내 자체 서명 된 인증서를 만들려고 그것.
조언 해 주셔서 감사합니다. 이러한 옵션 중 하나를 어떻게 얻을 수 있습니까? 나는 친숙하지 않다. – FullStack
자체 파싱은 적절한 RFC를 찾아 데이터 구조를 찾은 다음 DER을 디코딩해야합니다. 제 3 자 라이브러리는 꽤 넓은 영역입니다. 그러나 가장 쉬운 해결책은'openssl req -new -x509 -key rsakey.pem -out selfsigned.cer'입니다 (프롬프트가 표시되면 모든 기본값을 그대로 사용합니다). (그리고 .p12 생성에서'-nocerts'를'-in selfsigned.cer'로 대체하십시오). 그런 다음 cert에서'GetRSAPrivateKey()'또는'GetRSAPublicKey()'를 호출하십시오. – bartonjs
다른 변형을 시도했지만, 마침내 작동합니다. 고맙습니다 – FullStack