BouncyCastle.Net中的openssl命令重复

本文关键字:命令 openssl Net 中的 BouncyCastle | 更新日期: 2023-09-27 18:27:58

我正在尝试生成一个CSR以用于ApplePay。我们将在服务器上运行此程序,并随着时间的推移生成1000个这样的程序。我更喜欢在代码/内存中执行此操作,而不是直接运行openssl命令,这样私钥就永远不会在HHD上。

我知道这些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,苹果的支持拒绝提供帮助。我注意到的一件事是,我的CSR数据大约是OpenSSL数据的两倍长。

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

BouncyCastle.Net中的openssl命令重复

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

DerObjectIdentifier ecParam=新DerObjectIdentifier["1.2.840.10045.3.1.7"];