CDP扩展ASN.1标签

问题描述 投票:0回答:1

我想了解x509证书中CDP扩展使用的ASN.1格式。

当从google上阅读证书时,我看到这些代码相关。

30 26 30 24 a0 22 a0 20 86 1e (url start)

根据 http:/rcardon.free.frwebsigndownloadapi-x509-extbecardonasn1x509extensionsCRLDistributionPoints.html。http:/javadoc.iaik.tugraz.asiaik_jcecurrentiaikasn1structuresGeneralNames.html。,GeneralNames应该是GeneralName的SEQUENCE。为什么直接有一个86而没有另一个30?

非常感谢。

更新:而且,我知道它的语法可能不正确,如果只有一个DistributionPoint,有一个DistributionPointName-Url(*1),DistributionPointName-nameRelativeToCRLIssuer(*2),一个全部为0的原因(*3),和两个cRLIssuer-DNSName(*4和*5),那么这个数据包应该是。

  30 len --DistributionPoint
    a0 len --DistributionPointName for distributionPoint
      a0 len --GeneralNames for fullName
        86 len --IA5String for uniformResourceIdentifier
        (*1) data here
      a1 len --RelativeDistinguishedName for nameRelativeToCRLIssuer  (edited)
        (*2) data here
    81 03 --Reason
      07 00 00 --BITSTRING of Reason (*3)
    a2 len --GeneralNames for cRLIssuer
      82 len --IA5String for dNSName
        (*4) data here
      82 len --IA5String for dNSName
        (*5) data here

我说的对吗?

asn.1
1个回答
1
投票

你有没有尝试分析提供的八位数?你要求丢失的SEQUENCE,但不要求额外的 a0 兜售 86 标签。如果你愿意,你可以弄清楚是怎么回事。

你的CDP扩展值的二进制编码看起来没问题。0x86是一般名称CHOICE的 uniformResourceLocator 字段。如果您将二进制字符串拆分成几块,您将得到以下映射(假设隐式标记模式,根据 RFC 5280)。

  • 30 26 -- 映射到 CRLDistributionPoints
  • 30 24 -- -- 地图 DistributionPoint
  • A0 22 -- -- 地图 DistributionPointName (它是OPTIONAL字段,因此使用隐性标签)
  • A0 20 -- -- 地图 GeneralNames (它是一个CHOICE值,因此使用隐性标签)
  • 86 1e-地图至 uniformResourceIdentifier 领域 IA5String 类型。是CHOICE值,这个使用的是隐性标签。

看来你是把标签搞混了。GeneralName type确实是 SEQUENCE但在给定的上下文中,它是在CHOICE中使用的,所以它被隐式标记。SEQUENCE标签被替换为相应的 CONTEXT_SPECIFIC 标签[0]。

更新:当ASN模块中包含CHOICE、OPTIONAL、DEFAULT关键字时,它们使用的是CONTEXT_SPECIFIC类,其基本标签号为0x80。

当 ASN 模块包含 CHOICE、OPTIONAL、DEFAULT 关键字时,它们使用 CONTEXT_SPECIFIC 类,该类的基本标签号为 0x80。选择符被指定在方括号内。在这些情况下,你可以这样做(当模块默认使用隐式标签时,就像在我们的例子中)。CONTEXT_SPECIFIC class (0x80) + CONSTRUCTED BIT (0x32) from original type + Selector number in square bra括号。

例如,带有选择器0的可选SEQUENCE将导致0x80 + 0x20 + 0 = 0xa0。选择[6]IA5String将导致0x80 + 0x0(CONSTRUCTED位为0)+0x6 = 0x86。

当模块默认为显式标记或有EXPLICIT keywor时,那么原始类型不会改变(SEQUENCE仍为SEQUENCE),而是将其编码为CONSTRUCTED CONTEXT_SPECIFIC的嵌套类型。

© www.soinside.com 2019 - 2024. All rights reserved.