gpt4 book ai didi

c# - 创建并签署证书

转载 作者:可可西里 更新时间:2023-11-01 11:25:51 26 4
gpt4 key购买 nike

我正在开发一个 API 服务器,它将从用户那里获取以下信息的输入

"CN=ABC123,O=DEF,L=XYZ,S=CA,C=US,E=info@abc.com"

并使用我们的根证书创建签名的开发者证书。为了使用 makecert.exe 制作证书,我遵循了 Creating self signed certificates with makecert.exe for development教程并使用以下命令创建根证书

makecert.exe ^
-n "CN=CARoot" ^
-r ^
-pe ^
-a sha512 ^
-len 4096 ^
-cy authority ^
-sv CARoot.pvk ^
CARoot.cer

pvk2pfx.exe ^
-pvk CARoot.pvk ^
-spc CARoot.cer ^
-pfx CARoot.pfx ^
-po Test123

在命令提示符下,它会在提示弹出窗口中询问证书和 private.key 密码,这很好,因为这是一次性过程,我已手动完成此操作

我用过的开发者证书在哪里

Process.Start("makecert.exe",certCmd);

certCmd 中将以下内容作为 string

makecert.exe ^
-n "CN=%1" ^
-iv CARoot.pvk ^
-ic CARoot.cer ^
-pe ^
-a sha512 ^
-len 4096 ^
-b 01/01/2014 ^
-e 01/01/2016 ^
-sky exchange ^
-eku 1.3.6.1.5.5.7.3.2 ^
-sv %1.pvk ^
%1.cer

pvk2pfx.exe ^
-pvk %1.pvk ^
-spc %1.cer ^
-pfx %1.pfx ^
-po Test123

现在根据documentation上面的命令中没有给出 -po 参数,因此它在提示符中要求输入密码 这是一个问题

因为这是一个API,所以无法在提示输入私钥时输入密码

另一种选择是使用 X509Certificate2bouncyCaSTLe 但不确定如何使用它们,任何帮助将不胜感激

我想让它尽可能简单,这就是我使用 makecert.exeProcess.Start()

的原因

最佳答案

如果您想生成自己的证书...我过去曾使用此代码即时生成证书。您需要根据您的解决方案对其进行调整,但它应该会为您提供所需的一切。它使用充气城堡。

public static X509Certificate GenerateRootCertificate(AsymmetricCipherKeyPair key, X509Name subjectAndIssuer, int serialNumber, int yearsValid)
{
X509V3CertificateGenerator gen = new X509V3CertificateGenerator();
Asn1SignatureFactory sig = new Asn1SignatureFactory("SHA256withRSA", key.Private, new SecureRandom());
DateTime notBefore = DateTime.Now;
DateTime notAfter = DateTime.Now.AddYears(yearsValid);

gen.SetSerialNumber(BigInteger.ValueOf(serialNumber));
gen.SetSubjectDN(subjectAndIssuer);
gen.SetIssuerDN(subjectAndIssuer);
gen.SetPublicKey(key.Public);

gen.AddExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(true));
gen.AddExtension(X509Extensions.KeyUsage, true, new KeyUsage(KeyUsage.DigitalSignature | KeyUsage.CrlSign | KeyUsage.KeyCertSign));
gen.AddExtension(X509Extensions.SubjectKeyIdentifier, false, new SubjectKeyIdentifierStructure(key.Public));
gen.AddExtension(X509Extensions.AuthorityKeyIdentifier, false, new AuthorityKeyIdentifierStructure(key.Public));

gen.SetNotBefore(notBefore);
gen.SetNotAfter(notAfter);

return gen.Generate(sig);
}

这可能是更好的解决方法,最终让您拥有更多控制权。

编辑:您可以使用此方法检索您的公钥和私钥,前提是它是 PEM 格式:

public static object ReadObjectFromPEMFile(string fileName)
{
PemReader reader = new PemReader(new StreamReader(File.Open(fileName, FileMode.Open)));
object r = reader.ReadObject();
reader.Reader.Close();
return r;
}

不要忘记将结果转换为 AsymmetricCipherKeyPair!

关于c# - 创建并签署证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37019580/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com