C#에서 PKCS#8 RSA PrivateKey (OpenSSL에 의해 생성)를 가져 오는 방법
-
19-09-2019 - |
문제
외부 라이브러리를 사용하지 않고 C#에서 OpenSSL PKCS# 8 RSA를 사용하여 만든 개인 키를 읽는 방법을 찾으려고 노력하고 있습니다.
누군가 내가 어떻게 할 수 있는지 알고 있습니까?
해결책
이것을하는 가장 쉬운 방법 ~와 함께 외부 라이브러리는 (무료)를 사용하고 있습니다. Chillkat 공개 / 개인 키 구성 요소: 그것을 사용하여, 키 가져 오기를 사용하여 수행 할 수 있습니다. 몇 줄의 코드 그리고 도서관의 나머지 부분에 대해 $ 149 정도를 기꺼이 지불한다면 일반적인 암호화 개념을 다루는 것도 훨씬 쉽습니다.
일반 Microsoft .NET 프레임 워크와 달리 Mono Project 하다 있는 것 같습니다 PKCS8 구현 무엇을 위해 전체 C# 소스 사용할 수 있습니다. 이것은 모노 코드와 관련된 (LGPL 2.0) 라이센스가 귀하를 위해 작동한다고 가정 할 때 외부 라이브러리에 절대적으로 의존 할 수없는 경우 시작점으로 적합 할 수 있습니다.
마지막으로, PKCS #8 형식 구문 분석하기가 어렵지 않으며 RSA/DSA 키 쌍 개체는 PKCS #11 그리고 모든 비트가 어디로 가는지 알아 내면 .NET X509Certificate로 변환하기가 비교적 쉽습니다. 실제로 VB.NET에서 실제로이 작업을 수행했지만 불행히도 해당 코드를 공유 할 수는 없습니다.
다른 팁
답변 해주셔서 감사합니다.
RSA 키를 만들기위한 내 스크립트를 사용한 OpenSSL Whit :
(Linux 스크립트)
openssl genrsa -out ${NAME}_openssl.key 2048
openssl pkcs8 -topk8 -in ${NAME}_openssl.key -nocrypt > ${NAME}.key
openssl req -new -x509 -key ${NAME}.key -out ${NAME}.crt -outform DER
C#에서는 XML 형식의 개인 키가 필요합니다. 나는 사용했다 이것 이것을 할 파서.
도전을 해독하려면 사용해야합니다.
byte[] challange = server.getChallenge();
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider();
rsaProvider.FromXmlString(Demo.Properties.Resources.XmlPrivateKey);
byte[] plaintext = rsaProvider.Decrypt(challange, false);
Whit 서버 인증서를 암호화하려면 사용해야합니다.
RSACryptoServiceProvider rsaProvider = x509.PublicKey.Key as RSACryptoServiceProvider;
byte[] answer = RsaProvider.Encrypt(plaintext, false);
Javascience Consulting에 감사드립니다