gpt4 book ai didi

c++ - 将 STACK_OF(X509) 转换为 ASN1 流

转载 作者:太空宇宙 更新时间:2023-11-04 04:31:15 24 4
gpt4 key购买 nike

首先:抱歉我的英语不好。我希望你能理解我。

我使用的是 OpenSSL 1.0.2,但遇到了一些问题。我有一个带有三个证书的 STACK_OF(X509) 对象,我想将此堆栈转换为 ASN1 对象(如 OCTET STRING 或 ANY)。这可能吗?我使用外部 asn.1 库而不是 OpenSSL-ASN1。所以我需要数据作为无符号字符(原始二进制或 DER 编码)。

我可以通过 i2d_X509() 将单个证书转换为 DER 格式。这很好,但我想要完整的堆栈。这是我的目标:

myAsn1Data ::= sequence {
... -- (some ASN.1 data)
... -- (some ASN.1 data)
ANY -- contain the DER encoded STACK_OF(X509)....somehow
}

但这可能是正确的方法(ASN.1 语法):

stackOfX509 ::= SEQUENCE_Of {
TBSCertificate
}

或者像这样:

stackOfX509 ::= SET_OF {
ANY -- contain a DER encoded X509 certificate
}

我希望有人能帮助我。

最佳答案

人们通常会为此做以下两件事之一。

1)“作弊”!如果证书的 DER 编码表示可用但它的原始模式不可用,则只需使用 OCTET STRING 来存储字节。

myAsn1Data ::= SEQUENCE {
..., -- (some ASN.1 Data)
..., -- (some ASN.1 Data)
cert [2] OCTET STRING -- (the DER bytes would go in this field)
}

您的应用程序代码流类似于

myAsn1Data data = new(myAsn1Data);
data.cert = readbytesfromfile(certificatefile);
data.something = 10;
data.else = 20;
asn1encode(data, outputfile)

2) 获取 X509 证书的原始架构。它应该在 here 中某处,看起来像第 7.2 节。有了这个,您的 ASN.1 编译器将为您创建的源应该能够解码证书,允许您将它放在 myAsn1Data 的实例中。

IMPORTS Certificate FROM <ITU's X509 Schema file>

CertificateStack ::= SEQUENCE of Certificate

myAsn1Data ::= SEQUENCE {
..., -- (some ASN.1 Data)
..., -- (some ASN.1 Data)
cert [2] CertificateStack
}

您的应用程序代码中的序列看起来像这样:

Certificate cert1 = asn1decode(certificatefile);
Certificate cert2 = asn1decode(anothercertificatefile);
Certificate cert3 = asn1decode(yetanothercertificatefile);
CertificateStack stack;
stack.push_back(cert1);
stack.push_back(cert2);
stack.push_back(cert3);
myAsn1Data data = new(myAsn1Data);
data.cert = stack;
data.something = 10;
data.else = 20;
asn1encode(data, outputfile)

这种方式更好,因为它完全定义了“cert”字段的实际内容。如果您要与其他人交换数据,第一种方法就不太好,因为他们需要被告知证书字段的实际内容。

关于c++ - 将 STACK_OF(X509) 转换为 ASN1 流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995816/

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