Обычно, когда я захватываю X509Certificate2
из моего keystore я могу звонить .PrivateKey
получать закрытый ключ сертификата как AsymmetricAlgorithm
. Однако я решил использовать замок Bouncy и его экземпляр X509Certificate
только имеет a getPublicKey();
Я не вижу способ вытащить закрытый ключ из сертификата Какие-либо идеи?
Я получаю X509Certificate2 из своего Windows - МОИ keystore затем используют:
//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?
Должен там так или иначе преобразовать a AsymmetricAlgorithm
(Закрытый ключ C#) к a AsymmetricKeyParameter
(bouncycastle закрытый ключ)?
Я не очень хорошо знаю 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);
Очевидно, что это предполагает, что сертификат включает RSA ключ, но тот же результат может быть достигнут для DSA с помощью DSACryptoServiceProvider
и DSAParameters