【问题标题】:Getting reasonable names for ASN.1 identifiers获取 ASN.1 标识符的合理名称
【发布时间】:2017-09-19 03:16:34
【问题描述】:

使用 BouncyCastle 库(尽管我猜该库有点不相关)我经常遇到指定为 ASN.1 标识符的算法 ID。例如,证书的签名算法可能是"1.2.840.113549.1.1.11"

是否有适当的方法将其转换为某种人类可读的形式,涉及找到我可以得到的每个 ID 并手动构建一个巨大的查找表? p>

【问题讨论】:

    标签: java bouncycastle asn.1


    【解决方案1】:

    专门针对签名算法,可以使用org.bouncycastle.operator.DefaultAlgorithmNameFinder类。但是 - 如果我没记错的话 - 这只是在较新的版本中引入的(我使用的是 Bouncy Castle 1.57 - 我也签入了 1.46 并且它没有此类)。

    用法很简单:

    DefaultAlgorithmNameFinder algFinder = new DefaultAlgorithmNameFinder();
    System.out.println(algFinder.getAlgorithmName(new ASN1ObjectIdentifier("1.2.840.113549.1.1.11")));
    

    输出是:

    SHA256WITHRSA

    根据javadoc,如果找不到人类友好的名称,则返回输入中使用的相同OID。

    另请注意(如@pepo's answer 中所述)不同工具之间的人性化名称可能不同。 BouncyCastle 返回SHA256WITHRSA,而OID repository website 使用sha256WithRSAEncryption


    对于其他 OID(例如扩展和其他字段),我在 API 中找不到任何东西,因此唯一的选择似乎是大查找表。

    【讨论】:

      【解决方案2】:

      恕我直言,除了构建映射表之外别无他法。每个加密库都这样做,即。 Openssl、.NET 框架、BouncyCastle 等。

      问题是,每个库都可以(并且经常)将不同的FriendlyName 分配给相同的 OID。例如,Openssl 有 emailAddress,而 .NET 将其翻译为 E

      BouncyCastle 已经实现了这个映射表(对不起 c# 版本链接)here(可能在其他地方)。

      【讨论】:

      • 是的,他们似乎也将它分布在多个文件中......一张用于签名算法的表格,一张用于密钥用途的表格,一张用于扩展名的表格...... '正在从 OID -> 资源包密钥构建一个巨大的查找表,然后从那里查找它,但是如果所有想要解释无效证书的应用程序都必须付出这么多努力来显示一个漂亮的外观,那就太疯狂了对话给用户。 ://
      【解决方案3】:

      是否有适当的方法可以将其转换为某种人类可读的形式,而不涉及找到我可以得到的每个 ID 并手动构建一个巨大的查找表?

      我对 ASN.1 的体验是,模块实际上将 name 绑定到 OID:

      sha256WithRSAEncryption OBJECT IDENTIFIER ::= { pkcs-1 11 }

      这样您的 ASN.1 解析器理论上可以自动为您构建查找表。

      更方便的是,如果您的 ASN.1 库的 OBJECT IDENTIFIER 类型实现将名称附加到 OID 对象,以便人类能够提出以下问题:

      oid.name

      而不是通过查找表运行 OID:

      name = gigantic_oid2name_map[oid]

      【讨论】:

      • 我同意,BC 至少没有将标准符号名称放入标识符中,这太糟糕了。然后我就有了一个完美的值,我可以在上面加上一个前缀然后 bam,这是我的用户可读字符串的查找键。 :) 也许我会尝试询问他们是否认为值得添加。
      【解决方案4】:

      是的。就是这个:org.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers.sha256WithRSAEncryption。

      扩展见org.bouncycastle.asn1.x509.ASN1ObjectIdentifier的扩展列表。

      【讨论】:

        猜你喜欢
        • 2011-08-21
        • 2019-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-02-16
        • 2021-05-02
        • 1970-01-01
        • 2010-10-24
        相关资源
        最近更新 更多