OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段
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: SEQUENCE
189:d=3 hl=2 l= 13 cons: SEQUENCE
191:d=4 hl=2 l= 9 prim: OBJECT :rsaEncryption
202:d=4 hl=2 l= 0 prim: NULL
:d=3 hl=3 l= 141 prim: BIT STRING -- 偏移从 + hl = 开始
0000 - 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 .....%.....~$..A
0050 - 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: SEQUENCE
411:d=5 hl=2 l= 3 prim: OBJECT :X509v3 Subject Key Identifier
416:d=5 hl=2 l= 22 prim: OCTET STRING -- TLV 格式,蓝色部分是 SKID 的 Vlaue
0000 - 04 14 53 bb 46 ae de 70-07 86 22 dd 7f 5c e2 49 ..S.F..p.."..\.I
0010 - 1d 65 b8 f7 36 13 .e..6.
下图是更为详细的说明(图中黄色背景中去掉第一个0x00字节的部分)
二、提取公钥内容 -- 文件中的偏移是从 207 开始,长 141 字节,实际内容(ASN1 结构)需要向后偏移一个 0x00 字节
D:\>dd if=test.der bs=1 count= skip= of=skid iflag=binary oflag=binary
三、做 SHA1 摘要
D:\>openssl dgst -sha1 skid
SHA1(skid)= 53bb46aede70078622dd7f5ce2491d65b8f73613
与上图中显示的“使用者密钥标识符”相同
除了 SKID 外,还有 AKID,该字段唯一确定了(颁发当前证书的)证书颁发机构证书(即 CA 证书)的公钥。
AKID 的值也是证书颁发机构证书的公钥的摘要结果。感兴趣的同学可以验证下。
此外,由证书链的存在,可以推断,当前证书的 AKID 应该等于证书颁发机构证书的 SKID(如果存在此字段的话)。
OpenSSL 使用拾遗(二)---- X509 证书的 SKID/AKID 字段的更多相关文章
- openssl解析国密X509证书
openssl解析国密X509证书,把公钥拿出来重写一下就行了 x = strToX509(pbCert, pulCertLen);dwRet = getCertPubKey(x, &a ...
- 通过OpenSSL解码X509证书文件
在Windows平台下.假设要解析一个X509证书文件,最直接的办法是使用微软的CryptoAPI. 可是在非Windows平台下,就仅仅能使用强大的开源跨平台库OpenSSL了.一个X509证书通过 ...
- 通过OpenSSL解析X509证书基本项
在之前的文章"通过OpenSSL解码X509证书文件"里.讲述了怎样使用OpenSSL将证书文件解码,得到证书上下文结构体X509的方法. 以下我们接着讲述怎样通过证书上下文结构体 ...
- 【openssl】利用openssl完成X509证书和PFX证书之间的互转
利用openssl完成X509证书和PFX证书之间的互转 # OpenSSL的下载与安装: 1.下载地址: 官方网址—— https://www.openssl.org/source/ OpenSSL ...
- openssl rsa加密,解密以及X509证书的使用
Openssl的相关使用 生成证书 生成证书见:使用 openssl 生成证书 代码实现 Cert.h #ifndef _CERT_H #define _CERT_H ///header files ...
- 用Keytool和OpenSSL生成和签发数字证书
一)keytool生成私钥文件(.key)和签名请求文件(.csr),openssl签发数字证书 J2SDK在目录%JAVA_HOME%/bin提供了密钥库管理工具Keytool,用于管理密 ...
- 使用OpenSSL工具制作X.509证书的方法及其注意事项总结
版权声明:本文为博主原创文章.转载请注明出处. https://blog.csdn.net/Ping_Fani07/article/details/21622545 怎样使用OpenSSL工具生成根证 ...
- [转贴]使用CryptoAPI解析X509证书和P12证书
原文在 http://bbs.pediy.com/archive/index.php?t-97663.html,但是觉得这篇文章非常好,我抄下来作我笔记用 一.解析X509证书 1.从磁盘上的证书文件 ...
- x509证书相关内容
什么是证书 X.509证书,其核心是根据RFC 5280编码或数字签名的数字文档. 实际上,术语X.509证书通常指的是IETF的PKIX证书和X.509 v3证书标准的CRL 文件,即如RFC ...
随机推荐
- Java 执行系统命令
在Java中执行系统命令,主要是使用ProcessBuilder和Runtime.getRuntime().exec().而在这里主要是介绍两种方法的使用. 使用情景是在linux系统中,使用menc ...
- javadoc相关问题
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- ireport5.6+jasperreport6.3开发(三)--以javabean为基准的报表开发(javabean)
这里只有ireport的开发没有web侧的程序. ireport的数据源可以说是多种多样,大致可以通过文件 数据库 bean类这三种方式,这里只介绍bean类 (数据库比较简单可参考其他的网站,文件没 ...
- 使用JavaMail实现发送邮件功能
package com.dunn.model; import java.util.Properties; import javax.mail.Address; import javax.mail.Me ...
- Forward和Redirect的区别
一:间接请求转发(Redirect) 二:直接请求转发(Forward) 用户向服务器发送了一次HTTP请求,该请求可能会经过多个信息资源处理以后才返回给用户,各个信息资源使用请求转发机制相互转发请求 ...
- JS中循环绑定遇到的问题及解决方法
本文是原创文章,如需转载,请注明文章出处 在工作中,有时会有这样的需求:在一个页面上添加了6个按钮,然后分别为他们绑定点击事件监听器,当点击按钮1时,输出1,当点击按钮2时,输出2. 循环绑定代码如下 ...
- jQuery 点击显示再次点击隐藏
<html> <head> <script type="text/javascript" src="/jquery/jquery.js&qu ...
- java selenium (十一) 操作弹出对话框
Web 开发人员通常需要利用JavaScript弹出对话框来给用户一些信息提示, 包括以下几种类型 阅读目录 对话框类型 1. 警告框: 用于提示用户相关信息的验证结果, 错误或警告等 2. 提示框 ...
- CheckLogin
# encoding: utf-8 # Creator:耿亚月 Creation time:2017-1-1 # Modifier:耿亚月 Modification time:2017-1-2 #fi ...
- linux PHP 编译安装参数详解
linux PHP 编译安装参数详解 ./configure --prefix=/usr/local/php --with-config-file-path=/usr/local/php/etc -- ...