编译复杂(有很多参考)ASN 模式 - 证书请求格式 (RFC4211)

Compiling complex (with many references) ASN schema - Certificate Request Format ( RFC4211)

我想做的是拥有自己的例程(首选 CPP),它可以像 RFC4211 中那样创建证书请求消息。

我知道这样做的方法是首先获取 ASN 模块描述,然后编译它以获得我可以用来创建我需要的类型的对象的代码(在这种情况下是证书请求消息)。然后我可以使用 BER 或 XER 或其他任何方式对其进行编码...

所以我首先设置以收集所有需要的 ASN 模块,该列表包含很多 RFCS - RFC4211、RFC5280、RFC5652、RFC5755,也许还有一个我现在缺少的。我从 RFC 中提取它们,然后尝试编译它们,但我无法编译所有文件(我使用此编译器 http://lionet.info/asn1c/compiler.html )。 "lowest level" RFc(不从其他人导入)有效,但是当我将其他 RFC 添加到编译列表时,在某个时候(通常是在添加最后一个时),我收到一条消息,其中一两个找不到外部模块,即使它们在 args 列表中作为要编译的文件。我还收到有关 ASN 模块之间表达式冲突的消息...

我试图将所有模块放入一个文件中并使用了这个编译器:http://asn1-playground.oss.com/ 它似乎可以工作(有一些警告),但我无法使用这个在线编译器获取代码。

我不确定哪里出了问题 - 这个 asn1c 编译器 (v0.9.27) 是否有问题,或者是否有一些我必须执行但我没有执行的步骤?我是否必须自己手动更正所有这些冲突和进口或什么?

或者是否有更好的编译器可供我使用?

感谢您的帮助!

可在 http://www.itu.int/en/ITU-T/asn1/Pages/Tools.aspx. If you are looking for open source, you might consider Objective Systems compiler with ooberrt library (see http://www.obj-sys.com/products/opensource/index.php) 获取 ASN.1 工具列表作为 lionet 的替代品。

如果有人感兴趣或有同样的问题 -

我在 java 中使用 BouncyCastle API (1.49-1.52) 找到了一个 "solution"。该库包括我需要的 CMS 容器和 CRMF 等的特定实现,并且我能够找到一些(虽然不是非常详细的)示例应用程序,我可以从中构建我需要的消息。

如果您在 C# 中需要它,请记住 C# bouncycastle 实现不像 java 那样得到维护,并且 API 中存在差异。有一些工具允许您 "port" 库从 java 到 C#,因此您拥有最新的最新版本。

虽然我自己仍然无法完全编译整个模式...只是找到了这种方法。

也许答案可以帮助其他有需要的人。