Код: Выделить всё
private static X509Certificate2 CreateCertificate(string subject, DateTimeOffset notBefore, DataTimeOffset notAfter, string issuer, AsymmetricKeyParamter issuerPrivateKey)
{
// Setup
X509V3CertificateGenerator certGenerator = new X509V3CertificateGenerator();
SecureRandom random = new SecureRandom(new CryptoApiRandomGenerator());
RsaKeyPairGenerator keyPairGenerator = new RsaKeyPairGenerator();
keyPairGenerator.Init(new KeyGenerationParameters(random, KeyStrength));
// Randomly generate a serial number
BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(long.MaxValue), random);
certGenerator.SetSerialNumber(serialNumber);
// Set the issuer and subject names
X509Name issuerName = new X509Name(issuer);
X509Name subjectName = new X509Name(subject);
certGenerator.SetIssuerDN(issuerName);
certGenerator.SetSubjectDN(subjectName);
// Set the validity period
certGenerator.SetNotBefore(notBefore.UtcDateTime);
certGenerator.SetNotAfter(notAfter.UtcDateTime);
// Randomly generate the public key
AsymmetricCipherKeyPair subjectKeyPair = keyPairGenerator.GenerateKeyPair();
certGenerator.SetPublicKey(subjectKeyPair.Public);
// Generate the signed certificate
ISignatureFactory signatureFactory = new Asn1SignatureFactory(SHA256RSASignatureAlgorithm, issuerPrivateKey ?? subjectKeyPair.Private, random);
X509Certificate2 certificate = new X509Certificate2(certGenerator.Generate(signatureFactory).GetEncoded());
// Include the private key with the response
// ERROR HERE!
certificate.PrivateKey = DotNetUtilities.ToRSA(subjectKeyPair.Private as RsaPrivateCrtKeyParameters);
return certificate;
}
Операция не поддерживается на этой платформе.
Очевидно, это ожидаемое поведение в .NET Core. Мне известен метод CopyWithPrivateKey, упомянутый в этом вопросе, который теоретически мне следует использовать. Однако этот метод не поддерживается в .NET Standard 2.0 (обратите внимание на ошибку вверху страницы, указывающую на перенаправление). Кроме того, в настоящий момент приложение .NET Framework невозможно преобразовать в .NET Core из-за некоторых других зависимостей, которыми является .NET Framework. Согласно этому документу, .NET Standard 2.1 вообще не поддерживается .NET Framework, а это означает, что я не могу выполнить обновление до .NET Standard 2.1 и использовать CopyWithPrivateKey!
Как создать X509Certificate2 с закрытым ключом в .NET Standard 2.0 способом, совместимым с .NET Core?
Подробнее здесь: https://stackoverflow.com/questions/597 ... 0-core-2-1
Мобильная версия