2010-07-13 3 views
7

일반적으로 내 키 저장소에서 X509Certificate2을 가져 오면 .PrivateKey으로 전화하여 AsymmetricAlgorithm으로 인증서의 개인 키를 검색 할 수 있습니다. 그러나 Bouncy Castle을 사용하기로 결정했으며 X509Certificate의 인스턴스에만 getPublicKey();이 있습니다. 개인 키를 인증서에서 가져 오는 방법을 볼 수 없습니다. 어떤 아이디어?BouncyCastle X509 인증서에서 개인 키 가져 오기? C#

//mycert is an X509Certificate2 retrieved from Windows-MY Keystore 
X509CertificateParser certParser = new X509CertificateParser(); 
X509Certificate privateCertBouncy = certParser.ReadCertificate(mycert.GetRawCertData()); 
AsymmetricKeyParameter pubKey = privateCertBouncy.GetPublicKey(); 
//how do i now get the private key to make a keypair? 

인가가 어쨌든 AsymmetricKeyParameterAsymmetricAlgorithm (C# 개인 키를) 변환 (개인 키 bouncycastle) :

내가 사용 후 내 Windows-MY 키 스토어에서 X509Certificate2를 얻을?

+1

당신은 어떻게이 X509Certificate 개체를 얻을 수있다? 어떤 종류의 용기를 사용하고 있습니까? – CriGoT

+0

질문이 업데이트되었습니다. –

+1

X509 인증서에 * 개인 키가 없습니다. –

답변

12

모르겠다. BouncyCastle 그 정도는 알지만 간단히 말해서 중요한 것은 키 매개 변수를 기반으로 키를 다시 만드는 것입니다.

 

    public static AsymmetricKeyParameter TransformRSAPrivateKey(AsymmetricAlgorithm privateKey) 
    { 
     RSACryptoServiceProvider prov = privateKey as RSACryptoServiceProvider; 
     RSAParameters parameters = prov.ExportParameters(true); 

     return new RsaPrivateCrtKeyParameters(
      new BigInteger(1,parameters.Modulus), 
      new BigInteger(1,parameters.Exponent), 
      new BigInteger(1,parameters.D), 
      new BigInteger(1,parameters.P), 
      new BigInteger(1,parameters.Q), 
      new BigInteger(1,parameters.DP), 
      new BigInteger(1,parameters.DQ), 
      new BigInteger(1,parameters.InverseQ)); 
    } 
 

당신은

 

AsymmetricKeyParameter bouncyCastlePrivateKey = TransformRSAPrivateKey(mycert.PrivateKey); 
 

를 사용하여 코드를 호출 할 수는 분명히 이것은 인증서가 DSACryptoServiceProviderDSAParameters

+0

지독한 매력처럼 일하면서, 당신은 신사이고 학자입니다. –

+0

DSA에 대한 코드를 제공해 주시겠습니까? A 자신에 의해 그것을 시도했지만 작동하지 않습니다 ... – vojta

19
Akp = Org.BouncyCastle.Security.DotNetUtilities.GetKeyPair(this.Certificate.PrivateKey).Private; 
+4

이 답변해야합니까? – Sushant

1
와 DSA 달성 할 수있는 RSA 키하지만 동일한 결과를 포함하고 있다고 가정

찾기 .NET X509Certificate2 :

X509Certificate2 cert = this.FindCertificate(certificateFriendlyName); 

BouncyCastle 인증서에 대한 구문 분석을하고 서명을 얻을 수 X509Certificate2Signature를 사용

var parser = new X509CertificateParser(); 
var bouncyCertificate = parser.ReadCertificate(cert.RawData); 
var algorithm = DigestAlgorithms.GetDigest(bouncyCertificate.SigAlgOid); 
var signature = new X509Certificate2Signature(cert, algorithm); 
관련 문제