gpt4 book ai didi

c# - 从 .net Framework 4.7.2 中的 base64 字符串创建证书请求

转载 作者:行者123 更新时间:2023-11-30 17:28:20 25 4
gpt4 key购买 nike

过去,我使用 certTool com CERTENROLLLib 来创建 csr。从版本 4.7.2 开始,您可以使用 .net Framework。

可以通过在 CreateSigningRequest 方法中传递所有必需的属性来创建 csr 并将其转换为 pem base64 字符串。

不幸的是我找不到其他方法,在一个字段中复制一个 pem 格式的 csr 并从中读取所有 csr 属性(cn、san、organization 等)

我不想使用 com lib CERTENROLLLib、openssl 或其他第 3 方。

这是我所做的(获取 csr pem 字符串)在这里和 MS Framework 类描述中找到了很好的例子,感谢您的帮助

protected void createButton_Click(object sender, EventArgs e)
{
string csr_cn = txtb_csr_cn.Text;
string csr_c = txtb_csr_c.Text;
string csr_l = txtb_csr_l.Text;
string csr_o = txtb_csr_o.Text;
string csr_ou = txtb_csr_ou.Text;
string csr_s = txtb_csr_s.Text;
csr_san = sanMemo.Text.Replace(" ", "");
if (csr_san.IndexOf(csr_cn) == -1)
{
if (csr_san == "")
{
csr_san = csr_cn;
}
else
{
csr_san = csr_cn + "," + csr_san;
}
}
csr_key_size = Convert.ToInt32(combobox_csr_key.Text);
csr_info = "CN=" + csr_cn + "," + "OU=" + csr_ou + "," + "O=" + csr_o + "," + "L=" + csr_l + "," + "S=" + csr_s + "," + "C=" + csr_c;
notesMemo.Text = CreateCSR(); //CreateRequest();

}

public static string CreateCSR()
{
string[] arrSeperator = new string[] { "," };

RSA keySize = RSA.Create(csr_key_size);

CertificateRequest parentReq = new CertificateRequest(csr_info,
//"CN=Experimental Issuing Authority",
keySize,
HashAlgorithmName.SHA256,
RSASignaturePadding.Pkcs1);

parentReq.CertificateExtensions.Add(
new X509BasicConstraintsExtension(true, false, 0, true));

parentReq.CertificateExtensions.Add(
new X509SubjectKeyIdentifierExtension(parentReq.PublicKey, false));


var sanBuilder = new SubjectAlternativeNameBuilder();
Array arrsan = csr_san.Split(arrSeperator, StringSplitOptions.RemoveEmptyEntries);
foreach (string sanvalue in arrsan)
{
sanBuilder.AddDnsName(sanvalue);
}

parentReq.CertificateExtensions.Add(sanBuilder.Build());

string csrdecrypt = PemEncodeSigningRequest(parentReq);
return csrdecrypt;

public static string PemEncodeSigningRequest(CertificateRequest request)
{
byte[] pkcs10 = request.CreateSigningRequest();
StringBuilder builder = new StringBuilder();

builder.AppendLine("-----BEGIN CERTIFICATE REQUEST-----");

string base64 = Convert.ToBase64String(pkcs10);

int offset = 0;
const int LineLength = 64;

while (offset < base64.Length)
{
int lineEnd = Math.Min(offset + LineLength, base64.Length);
builder.AppendLine(base64.Substring(offset, lineEnd - offset));
offset = lineEnd;
}

builder.AppendLine("-----END CERTIFICATE REQUEST-----");
string tester2 = builder.ToString();
return builder.ToString();
}

最佳答案

在没有第三方库的情况下,没有纯托管的方式来读取证书签名请求。

您可以尝试对 CryptDecodeObjectEx 使用 P/Invoke ,可能使用 X509_CERT 的结构标识符(根据 https://learn.microsoft.com/en-us/windows/desktop/SecCrypto/constants-for-cryptencodeobject-and-cryptdecodeobject )。

但 CertificateRequest 类是 PKCS#10 编写器,在 .NET Framework 中没有读取器。

更新 (2023-01-30):LoadSigningRequestPem在 .NET 7 中添加了好友。

关于c# - 从 .net Framework 4.7.2 中的 base64 字符串创建证书请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53070417/

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