使用命名曲线创建 CSR

问题描述 投票:0回答:1

我有一个由 OpenSSL 命令生成的 CSR,我想使用 Bouncy castle 生成相同的 CSR 结构。

但我有一个问题在屏幕截图中描述:

enter image description here

Bouncy castle CSR 由以下代码生成:

var curve = ECNamedCurveTable.GetByName("secp256k1");
var domainParams = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());

var secureRandom = new SecureRandom();
var keyParams = new ECKeyGenerationParameters(domainParams, secureRandom);

var generator = new ECKeyPairGenerator("ECDSA");
generator.Init(keyParams);

var keyPair = generator.GenerateKeyPair();

var privateKey = keyPair.Private as ECPrivateKeyParameters;
var publicKey = keyPair.Public as ECPublicKeyParameters;

IDictionary subjectAttributes = new Hashtable();
subjectAttributes.Add(X509Name.CN, "Test1");
subjectAttributes.Add(X509Name.O, "Test2");
subjectAttributes.Add(X509Name.OU, "Test3");
subjectAttributes.Add(X509Name.C, "SA");
            
DerObjectIdentifier RegisteredAddress = new DerObjectIdentifier("2.5.4.26");

IDictionary subjectAlternativeNameAttributes = new Hashtable();
subjectAlternativeNameAttributes.Add(X509Name.Surname, "TestSN");
subjectAlternativeNameAttributes.Add(X509Name.UID, "010101010101010");
subjectAlternativeNameAttributes.Add(X509Name.T, "1100");
subjectAlternativeNameAttributes.Add(RegisteredAddress, "Test Address");
subjectAlternativeNameAttributes.Add(X509Name.BusinessCategory, "IT");

var subjectName = new X509Name(new ArrayList(subjectAttributes.Keys), subjectAttributes);
var subjectAltNames = new X509Name(new ArrayList(subjectAlternativeNameAttributes.Keys), subjectAlternativeNameAttributes);
var generalNames = new GeneralNames(new[] { new GeneralName(subjectAltNames) });

var extensionsGenerator = new X509ExtensionsGenerator();
extensionsGenerator.AddExtension(MicrosoftObjectIdentifiers.MicrosoftCertTemplateV1, false,
                new DerOctetString(new DisplayText(4, "Test-Signing")));
extensionsGenerator.AddExtension(X509Extensions.SubjectAlternativeName, false, generalNames);

var extensions = extensionsGenerator.Generate();

var signatureFactory = new Asn1SignatureFactory("SHA256WITHECDSA", keyPair.Private);

var attributes = new AttributeX509(PkcsObjectIdentifiers.Pkcs9AtExtensionRequest, new DerSet(extensions));

var requestAttributeSet = new DerSet(attributes);

var certificateRequest = new Pkcs10CertificationRequest(signatureFactory, subjectName, keyPair.Public, requestAttributeSet);

您能否指导我应该在代码中更改哪些位置和内容以获得与 OpenSSL 相同的输出? 谢谢

如有任何帮助,我们将不胜感激

c# bouncycastle public-key csr
1个回答
0
投票

这段代码对我有用 c# mvc

 ECKeyPairGenerator keyPairGenerator = new ECKeyPairGenerator("ECDSA");
        ECKeyGenerationParameters keyGenParams = new 
 ECKeyGenerationParameters(SecObjectIdentifiers.SecP256k1, new SecureRandom());
        keyPairGenerator.Init(keyGenParams);
        AsymmetricCipherKeyPair keyPairTest = keyPairGenerator.GenerateKeyPair();
© www.soinside.com 2019 - 2024. All rights reserved.