SKID(证书使用者密钥标识符,subject key identifier 的简称)和 AKID(证书颁发机构密钥标识符,authority key identifier 的简称)是 X509 证书中常见的扩展字段。

下图是一张典型的证书文件(test.der),其中就包含 SKID 和 AKID 字段。

它们是做什么用的?简言之,这两个字段用于(通过 subject 和 issuer)快速区分证书。

数字证书使用已经很广泛,理论上多本证书可能具有相同的 subject name,该如何区分这种情况?

技术控很容易想到,就用公钥来分辨吧,因为每个自然生成的公钥,都是独一无二的。

但是,问题又来了:普通公钥都是一串又长又难记的二进制字符串,让人来识别比较,是个很费劲的事。

既然又长又难记,能否找一个简单易记的方法?

最终,聪明的人说,那就用 subject 公钥的摘要吧。

因此在证书结构中,增加一个 SKID 字段,其内容就是公钥内容的摘要结果。

根据摘要(理论上)的唯一性,SKID 段可以唯一确定证书的公钥,从而确定一本证书。

当然,确定证书的正确性仍是基本前提,所以证书链校验这个动作还是要做的。

下面用实际操作进行说明

一、找到公钥在文件中的位置

D:\>openssl asn1parse -in test.der -inform der -dump -i......186:d=2  hl=3 l= 159 cons:   SEQUENCE189:d=3  hl=2 l=  13 cons:    SEQUENCE191:d=4  hl=2 l=   9 prim:     OBJECT            :rsaEncryption202:d=4  hl=2 l=   0 prim:     NULL204:d=3  hl=3 l= 141 prim:    BIT STRING -- 偏移从 204 + hl = 207 开始0000 - 00 30 81 89 02 81 81 00-c1 af 95 f6 ae d0 21 7b   .0............!{0010 - 31 f3 93 68 18 ac 8f e6-53 83 99 cd 80 3d 9a d2   1..h....S....=..0020 - 9b 6a fa 08 1b 8b b7 1b-90 5e a1 82 18 c1 3f b0   .j.......^....?.0030 - 3f f2 3b 06 5b be e4 7a-b7 c2 36 9e 22 36 1e 60   ?.;.[..z..6."6.`0040 - b8 04 b7 f8 9e 25 e7 e3-f0 91 b2 7e 24 c4 c8 41   .....%.....~$..A0050 - 27 58 e6 0d 73 d6 f2 4d-12 bc 1b 77 4d 1f ca f1   'X..s..M...wM...0060 - 73 99 f3 8f 44 a0 fa 8f-e1 e9 99 e1 b0 ea 6d e1   s...D.........m.0070 - db 4d 27 45 40 c9 23 c1-c7 5e 27 ef e8 54 6c c2   .M'E@.#..^'..Tl.0080 - cd 02 41 91 bd 1c be fb-02 03 01 00 01            ..A................409:d=4  hl=2 l=  29 cons:     SEQUENCE411:d=5  hl=2 l=   3 prim:      OBJECT            :X509v3 Subject Key Identifier416:d=5  hl=2 l=  22 prim:      OCTET STRING -- TLV 格式,蓝色部分是 SKID 的 Vlaue0000 - 04 14 53 bb 46 ae de 70-07 86 22 dd 7f 5c e2 49   ..S.F..p.."..\.I0010 - 1d 65 b8 f7 36 13                                 .e..6.

下图是更为详细的说明(图中黄色背景中去掉第一个0x00字节的部分)

二、提取公钥内容 -- 文件中的偏移是从 207 开始,长 141 字节,实际内容(ASN1 结构)需要向后偏移一个 0x00 字节

D:\>dd if=test.der bs=1 count=140 skip=208 of=skid iflag=binary oflag=binary

三、做 SHA1 摘要

D:\>openssl dgst -sha1 skid
SHA1(skid)= 53bb46aede70078622dd7f5ce2491d65b8f73613

与上图中显示的“使用者密钥标识符”相同

除了 SKID 外,还有 AKID,该字段唯一确定了(颁发当前证书的)证书颁发机构证书(即 CA 证书)的公钥。

AKID 的值也是证书颁发机构证书的公钥的摘要结果。感兴趣的同学可以验证下。

此外,由证书链的存在,可以推断,当前证书的 AKID 应该等于证书颁发机构证书的 SKID(如果存在此字段的话)。

转载于:https://www.cnblogs.com/efzju/p/4976144.html

OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段相关推荐

  1. openssl解析国密X509证书

    openssl解析国密X509证书,把公钥拿出来重写一下就行了         x = strToX509(pbCert, pulCertLen); dwRet = getCertPubKey(x,  ...

  2. java解码p7b证书文件,通过OpenSSL解码X509证书文件

    在Windows平台下,如果要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI.但是在非Windows平台下,就只能使用强大的开源跨平台库OpenSSL了.一个X509证书通过Op ...

  3. 通过OpenSSL解析X509证书基本项

    在之前的文章"通过OpenSSL解码X509证书文件"里,讲述了如何使用OpenSSL将证书文件解码,得到证书上下文结构体X509的方法.下面我们接着讲述如何通过证书上下文结构体X ...

  4. 【openssl】利用openssl完成X509证书和PFX证书之间的互转

    利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址-- https://www.openssl.org/source/ OpenSSL ...

  5. OPENSSL X509证书验证

    openssl实现了标准的x509v3数字证书,其源码在crypto/x509和crypto/x509v3中.其中x509目录实现了数字证书以及证书申请相关的各种函数,包括了X509和X509_REQ ...

  6. 利用openssl生成X509证书

    利用openssl生成X509证书 1.生成密钥 openssl genrsa -out test.key 2048 2.生成cert证书(sha512/sha256/sha1要根据实际算法) ope ...

  7. linux 运行ca.crt,linux下使用openssl生成 csr crt CA证书,opensslcsr

    linux下使用openssl生成 csr crt CA证书,opensslcsr 本文主要借鉴和引用了下面2个地址的内容,然后在自己的机器上进行了测试和执行,并做了如下记录. ref: http:/ ...

  8. 基于OpenSSL的CA建立及证书签发(签发多域名/IP)

    自签SSL证书(多域名/IP) 本文基于以下环境: 内核信息:Linux zabbix 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 ...

  9. 用OpenSSL做自签名的证书(by quqi99)

    作者:张华 发表于:2014-04-18 版权声明:可以任意转载,转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 (http://blog.csdn.net/quqi99 ) 注:cs ...

最新文章

  1. Java 统计字母个数
  2. mysql数据库存储引擎选择_MySQL数据库性能优化之存储引擎选择
  3. SpringBoot-动力节点-王鹤
  4. WP7有约(六):AppBarUtils使用指南
  5. 快速开发框架工作笔记002---项目开发中整理_整合好的_Netty高并发处理快速开发框架_Netty快速开发框架
  6. 在安装project2010 64位时提示 “无法安装64位office,因为已有32位版本”解决方法
  7. CMMI与Agile敏捷开发比较之二:需求管理篇(兼谈用敏捷实现和满足CMMI的ReqM过程域)...
  8. 厉害了,苹果爸爸承认让旧 iPhone 变慢!
  9. 纯css3鼠标经过图片显示描述特效
  10. Ubuntu安装网易云音乐
  11. 计算机专业必看电影,IT人士必看的10部电影
  12. 图形化开发(五)011-Three.js之Geometry几何体——立方体、圆形、圆锥
  13. (转)用4年多时间, 带领微软重登全球市值第一宝座, 纳德拉是如何做到的?
  14. C文件操作——字符 读写函数 getc和putc(是一个宏的实现)
  15. 串口通信 数据采集软件 上位机 数据采集软件,可以采集plc,串口通信设备,tcp通信设备的数据
  16. 地中海?修电脑的?格子衫?那些对程序员的高级黑!!!
  17. 共享系统APP开发:带你体验真实的共享生活
  18. 计算机del键作用,计算机里的英文字母“DEL”键是干什么用的
  19. 【其它】visio画泳道图/跨职能流程图
  20. 企业IT基础设施架构规划

热门文章

  1. 行人重识别(3)——行人重识别(基于图像)综述
  2. 华为交换机查看网口光功率命令
  3. fcpx插件:Stupid Raisins Grid Pop(网格弹出布局模板)
  4. fcpx插件Stupid Raisins Shop Pop for Mac(27种购物主题标题模板)
  5. 爆炸的符卡洋洋洒洒题解报告
  6. 福建农林大学计算机课程表,福建农林大学金山学课程表.doc
  7. anaconda使用心得
  8. flask 使用cnd导入bootstrap5
  9. jQuery Mobel 学习相关资料整理(一)
  10. 产品经理的总结(一)