C# 在BouncyCastle.Net中复制openssl命令

C# 在BouncyCastle.Net中复制openssl命令,c#,openssl,bouncycastle,csr,C#,Openssl,Bouncycastle,Csr,我正在尝试生成一个CSR,用于ApplePay。我们将在服务器上运行此功能,并随着时间的推移生成1000个。*** 我知道这些openssl命令可以工作 openssl ecparam -out private.key -name prime256v1 -genkey openssl req -new -sha256 -key private.key -nodes -out request.csr -subj '/O=Your Name or Company/C=US' 这是我的代码: //

我正在尝试生成一个CSR,用于ApplePay。我们将在服务器上运行此功能,并随着时间的推移生成1000个。*** 我知道这些openssl命令可以工作

openssl ecparam -out private.key -name prime256v1 -genkey
openssl req -new -sha256 -key private.key -nodes -out request.csr -subj '/O=Your Name or Company/C=US' 
这是我的代码:

// generate the key with a specified curve,
X9ECParameters curve = NistNamedCurves.GetByName("P-256");
ECDomainParameters ecParam = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());
ECKeyPairGenerator keyGen = new ECKeyPairGenerator();
keyGen.Init(new ECKeyGenerationParameters(ecParam, new SecureRandom()));

AsymmetricCipherKeyPair keyPairServer = keyGen.GenerateKeyPair();

var p10builder = new Pkcs10CertificationRequest
(
    "SHA256WITHECDSA",
    new X509Name("O=NAB Test,C=US"),
    keyPairServer.Public,
    null,
    keyPairServer.Private
);

// build string to send to Apple
string csr = CSR_HEADER + "\r\n" + Convert.ToBase64String(p10builder.GetEncoded()) + "\r\n" + CSR_FOOTER;
苹果的页面接受证书,并给我回复证书,让我从中提取一些信息。但是,当我“激活”此证书时,我会收到“未知错误”。因为我使用的是BC Apple support拒绝提供帮助。我注意到的一点是,我的CSR数据大约是OpenSSL数据的两倍


我认为它可能与-节点有关,但我不确定。

事实证明,问题在于曲线是如何传递到key gen的。如果你传递一个key param,所有的数据都会在证书中。如果你只使用曲线的OID,它不会传递所有曲线数据,这正是苹果感到不安的地方


DerObjectIdentifier ecParam=新的DerObjectIdentifier(“1.2.840.10045.3.1.7”)

蹦蹦跳跳的城堡人很有帮助。我似乎记得过去在他们的邮件列表档案中看到过一些类似的问题。另见。