Есть несколько разных вещей, о которых вы просите, с разными уровнями легкости.
Прикрепление закрытого ключа к сертификату
Начиная с .NET Framework 4.7.2 илиВ .NET Core 2.0 вы можете комбинировать сертификат и ключ.Он не изменяет объект сертификата, а создает новый объект сертификата, который знает о ключе.
using (X509Certificate2 pubOnly = new X509Certificate2("myCert.crt"))
using (X509Certificate2 pubPrivEphemeral = pubOnly.CopyWithPrivateKey(privateKey))
{
// Export as PFX and re-import if you want "normal PFX private key lifetime"
// (this step is currently required for SslStream, but not for most other things
// using certificates)
return new X509Certificate2(pubPrivEphemeral.Export(X509ContentType.Pfx));
}
в .NET Framework (но не в .NET Core), если ваш закрытый ключ равен RSACryptoServiceProvider
или DSACryptoServiceProvider
вы можете использовать cert.PrivateKey = key
, но это имеет сложные побочные эффекты и не рекомендуется.
Загрузка секретного ключа
Этот сложнее, если вы его уже не решили.
В большинстве случаев ответом на этот вопрос является Цифровая подпись в c # без использования BouncyCastle , но если вы сможете перейти на .NET Core 3.0, все станет намного проще.
PKCS # 8 PrivateKeyInfo
Начиная с .NET Core 3.0 вы можете сделать это относительно просто:
using (RSA rsa = RSA.Create())
{
rsa.ImportPkcs8PrivateKey(binaryEncoding, out _);
// do stuff with the key now
}
(конечно, если у вас был PEM, вам нужноPEM ", извлекая содержимое между разделителями BEGIN и END и пропуская его через Convert.FromBase64String
, чтобы получить binaryEncoding
).
PKCS # 8 EncryptedPrivateKeyInfo
Начиная с .NETCore 3.0 вы можете сделать это относительно просто:
using (RSA rsa = RSA.Create())
{
rsa.ImportEncryptedPkcs8PrivateKey(password, binaryEncoding, out _);
// do stuff with the key now
}
(какbove, вам нужно сначала «де-PEM», если это был PEM).
PKCS # 1 RSAPrivateKey
Начиная с .NET Core 3.0 вы можете сделать это относительно просто:
using (RSA rsa = RSA.Create())
{
rsa.ImportRSAPrivateKey(binaryEncoding, out _);
// do stuff with the key now
}
(то же самое "de-PEM", если PEM).