Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Openssl 证书/CRL目录的哈希算法_Openssl - Fatal编程技术网

Openssl 证书/CRL目录的哈希算法

Openssl 证书/CRL目录的哈希算法,openssl,Openssl,OpenSSL能够为CA证书和CRL使用特定的目录结构。如果将目录名作为第三个参数传递给(如中所述),它将在此目录中查找CA证书,以验证客户端证书。它通过获取客户端证书颁发者的哈希并附加一个整数(例如,34bb8598.0)来查找正确的CA证书。通常,这些名称是指向真实文件的符号链接,并且符号链接是使用该工具创建的 类似地,OpenSSL可以将证书吊销列表存储在此类目录中(如中所述),并通过证书颁发者的哈希查找正确的吊销列表 现在,我需要让一个程序重用这样一个CRL目录。该程序不使用OpenSS

OpenSSL能够为CA证书和CRL使用特定的目录结构。如果将目录名作为第三个参数传递给(如中所述),它将在此目录中查找CA证书,以验证客户端证书。它通过获取客户端证书颁发者的哈希并附加一个整数(例如,
34bb8598.0
)来查找正确的CA证书。通常,这些名称是指向真实文件的符号链接,并且符号链接是使用该工具创建的

类似地,OpenSSL可以将证书吊销列表存储在此类目录中(如中所述),并通过证书颁发者的哈希查找正确的吊销列表


现在,我需要让一个程序重用这样一个CRL目录。该程序不使用OpenSSL,因此我需要以其他方式生成这些散列。生成这些散列文件名的算法是什么?

散列格式没有文档记录,因此这很可能会改变,事实上,它已经改变过一次。支持选项
-subject\u hash
-issuer\u hash
以及
-subject\u hash\u old
-issuer\u hash\u old
。本说明适用于OpenSSL 1.0.1f之后的“新”哈希格式

对应证书属性上的just call
X509\u NAME\u hash
。获取名称的“规范编码”的SHA-1散列,将其前四个字节视为小尾数32位整数,并返回它(有效地反转散列的前四个字节)

那么什么是“规范编码”?它是由函数生成的发卡机构名称的DER表示形式的变异。DER是一种标记长度值编码。我们表示的对象树如下所示:

  • rdnSequence
    ,带标签
    0x31
    (十进制49)
    • 一个或多个RelativeDistinguishedName项目,每个项目都带有标记
      0x30
      (十进制48)
      • 一种类型,表示为OID,带有标记
        0x06
      • 一个字符串值——这就是它变得有趣的地方
证书中给出的字符串值可以用多种不同的类型表示,例如,带有标记
0x13
的“可打印字符串”、带有标记
0x16
的“IA5字符串”或带有标记
0x0c
的UTF-8字符串

在生成“规范编码”时,RDN序列中每个项目的值将转换为UTF-8,并重新编码为带有标记
0x0c
的UTF-8字符串。这种情况发生在家庭中。此外,还应用了以下转换:

  • 删除所有前导和尾随空格。任何具有高阶位集的字节都可以不经更改地通过,因此在本上下文中,“空白”表示空格、换行符、换行符、回车符、水平制表符和垂直制表符
  • 在字符串内部,上面定义的一个或多个空白字符的任何运行都将被替换为单个空格(
    0x20
  • 字符转换为小写。由于忽略任何具有高阶位集的字节,因此这仅适用于ASCII字母A到Z
这就是你所需要做的


请注意,某些相关字段的ASN.1定义不允许UTF-8字符串(例如,国家代码仅限于“可打印字符串”),因此您可能无法直接使用ASN.1编码库。

哈希格式没有记录,因此可能会发生更改-事实上,它已经更改过一次。支持选项
-subject\u hash
-issuer\u hash
以及
-subject\u hash\u old
-issuer\u hash\u old
。本说明适用于OpenSSL 1.0.1f之后的“新”哈希格式

对应证书属性上的just call
X509\u NAME\u hash
。获取名称的“规范编码”的SHA-1散列,将其前四个字节视为小尾数32位整数,并返回它(有效地反转散列的前四个字节)

那么什么是“规范编码”?它是由函数生成的发卡机构名称的DER表示形式的变异。DER是一种标记长度值编码。我们表示的对象树如下所示:

  • rdnSequence
    ,带标签
    0x31
    (十进制49)
    • 一个或多个RelativeDistinguishedName项目,每个项目都带有标记
      0x30
      (十进制48)
      • 一种类型,表示为OID,带有标记
        0x06
      • 一个字符串值——这就是它变得有趣的地方
证书中给出的字符串值可以用多种不同的类型表示,例如,带有标记
0x13
的“可打印字符串”、带有标记
0x16
的“IA5字符串”或带有标记
0x0c
的UTF-8字符串

在生成“规范编码”时,RDN序列中每个项目的值将转换为UTF-8,并重新编码为带有标记
0x0c
的UTF-8字符串。这种情况发生在家庭中。此外,还应用了以下转换:

  • 删除所有前导和尾随空格。任何具有高阶位集的字节都可以不经更改地通过,因此在本上下文中,“空白”表示空格、换行符、换行符、回车符、水平制表符和垂直制表符
  • 在字符串内部,上面定义的一个或多个空白字符的任何运行都将被替换为单个空格(
    0x20
  • 字符转换为小写。由于忽略任何具有高阶位集的字节,因此这仅适用于ASCII字母A到Z
这就是你所需要做的

请注意,某些相关字段的ASN.1定义不允许UTF-8字符串(例如,国家代码仅限于“可打印字符串”),因此您可能无法使用ASN.1 en