X.509证书的解析、验证及使用

X.509证书的解析、验证及使用

1.概述

1.1 简介

X.509格式证书是被广泛使用的数字证书标准,是用于标志通讯各方身份信息的一系列数据。

1.2常见的X.509格式证书

.cer/.crt是用于存放证书,以二进制形式存放,不含私钥

.pem跟.crt/.cer的区别是它以Ascii来表示,可以用于存放证书或私钥。

.pfx/.p12用于存放个人证书/私钥,他通常包含保护密码,2进制方式。

.p10是证书请求。

.p7r是CA对证书请求的回复,只用于导入

.p7b以树状展示证书链(certificate chain),同时也支持单个证书,不含私钥。

1.3 X.509证书的编码

X.509证书的结构是用ASN.1(Abstract Syntax Notation One:抽象语法标记)进行描述数据结构,并使用ASN.1语法进行编码。ASN.1结构:自己查阅

或见附录B。

1.4 X.509格式的证书构成规范

1.基本证书域(tbscertificate):版本号、序列号、签名算法、颁发者、有效日期、主体、主体公钥信息、颁发者唯一标识(o)、扩展项(o)

2.签名算法域(signatureAlgorithm):签名算法、参数(o)

3.签名值域(signatureValue):签名值

说明:

证书签名值:签名值是使用签名算法对基本证书域(tbscertificate)全部信息签名后的值。

1.5 证书结构实例

 1.5.1 用户证书的结构实例

 

版本号(version)
证书序列号(serialNumber)
签名算法标识符(signature)
颁发者名称(issuer)
有效期(validity):起始有效期
终止有效期
主体名称(subject):   countryName 国家
stateOrProvinceName 省份
   localityName 地市
  organizationName 组织名称
organizationalUnitName 机构名称
commanNmae 用户名称
主体公钥信息(subjectPublicKeyInfo)
authorityKeyIdentifier 颁发机构的密钥标识
subjectKeyIdentity 主体密钥标识符
CRLD isstributionPointsCRL 分发点

1.5.2服务器证书的结构实例

版本号(version)
证书序列号(serialNumber)
签名算法标识符(signature)
颁发者名称(issuer)
有效期(validity):起始有效期
终止有效期
主体名称(subject):   countryName 国家
stateOrProvinceName 省份
     localityName 地市
  organizationName 组织名称
organizationalUnitName 机构名称
commanNmae 服务器名称
主体公钥信息(subjectPublicKeyInfo)
authorityKeyIdentifier 颁发机构的密钥标识
subjectKeyIdentity 主体密钥标识符
CRLD isstributionPointsCRL 分发点

1.6证书实例解析

解析10.52.0.207.cer证书的结果:

 图片插不进来-----大哭

特别说明:

1.公钥数据部分: 00 30 81 89 02 81 81 00 9B F4 89 B6 26 65 66 41 C1 D0 AA 36 0C 95 E9 56 C9 9D 5B 63 02 F2 BE 29 3D AB A1 1F 68 A9 76 10 2F 98 93 4D 65 12 E4 3E 74 35 6A 40 E0 5F 69 6B D8 9A EB F7 E3 D7 5C E0 15 A5 CE 35 F6 30 33 FF 2E 9F FC DA BD 61 41 DF B0 73 CC A4 18 20 1C FF 84 11 E9 AD FF 43 2E 3E AE 6A C2 1C EB 76 B8 68 08 F2 AA DC 46 02 95 7E 66 8F 82 5C 91 E5 67 53 10 CE 36 DE E5 68 3F E6 6A 82 1D 62 C9 9C A6 E1 02 03 01 00 01 

红色字体部分是128字节公钥模。

绿色字体部分是3字节公钥指数值:0x 01 00 01。

2.签名结果:03 81 8100 9C 5A 31 23 FB 83 F4 8F D3 D7 BE 39 B5 2A 0A 7F FF 1D 72 EB 9B B1 7D F5 24 3D D7 D2 60 03 CA 4C 1E 49 A2 B2 E9 3A 80 FA D3 89 82 6A A0 3A 2B 60 F4 CD 56 FC 5C 68 03 C8 A3 C1 AD 42 01 3A E6 CF 70 2F 60 AF 56 7B 5D 24 C6 92 31 17 DE F5 CB 0E 41 1E 0A AC 3A 13 07 A5 CC C0 A3 27 0A 78 DA 4D FE B4 19 81 D8 F2 11 9C 8B 92 C7 D1 F6 2E 0B 24 B0 CA 4A 44 4C F3 4C 6D D1 66 2D A0 76 CF 70 4C 

红色字体才是签名值数据。

绿色字体 00 是无用的数据。

x.509数字证书编码详解

http://blog.csdn.net/kesay/article/details/46874699

 

1.7 X.509证书的签名验证

签名算法为:SHA1 with RSA:

SHA1即安全哈希算法(Secure Hash Algorithm),用于签名;RSA是目前最有影响力的公钥(非对称)加密算法。

SHA1 with RSA 就是发送端用Sha1 进行签名,然后用RSA算法对签名值加密(私钥加密)。那么签名验证就需要接受端先用RSA算法进行解密(公钥解密)得到签名值,再验证签名。

 

 1.待验证的证书:operation_CA2.cer

2 根证书:root_ca.cer 

3.目的:用CA1验证CA2

4.步骤

4.1 取CA2证书的签名体

4.2 取CA1证书的公钥(公钥模)

4.3 用CA1公钥解CA2的签名体(RAS公钥加密)

       4.4  取CA2证书的主体

4.5 对CA2证书主体做HASH运算得HASH值

4.6 对比签名:(对比签名体后20字节的话说和第5步的hash值,相等,说明证书验证成功)

2.如何将.cer证书发行到SE?

2.1 SE的文件结构

 ----

2.2  卡片详细文件结构

---

2.3 DF0A 网充应用目录下密钥文件

 ----

2.5 终端CA证书

2.5.1 终端CA证书的申请流程

 ----

终端CA证书:通过RA 系统,向部中心申请的证书,用于标识终端设备身份的、符合X.509 格式的唯一数字证书,每一个终端设备在一次发行时预置该证书。

2.5.2 如何预置?

个人理解“预置”的意思应该就是“写入”。对应上图流程的第8步。具体步骤是啥呢?往下看。

2.5.2.1 创建文件系统(MF-DF0A-终端证书文件)

 -----

已知终端CA证书文件是二进制文件,读自由,:PIN_DF0A(?),用创建文件命令:Create File 创建二进制文件:文件ID=001B,文件大小=0A00(2560字节),读权限=F0,写权限=F0,明文读取密文Mac更新,维护密钥Id=01,根据命令格式:见附录A.1,得到命令:

80E0 001B 07 280A00 F0F0 F3 01 ??(前提是已经在了DF0A目录下,若没有则依次创建上级目录)

2.5.2.2 写终端证书文件001B

读取.cer证书的内容,并计算字节个数,先将字节个数写入文件开始,再把内容写进001B文件。用写二进制文件命令,见附录A.2。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

附录A

 

A.1 Create File(建立文件)

A.1.1定义和范围

Create File命令用于建立文件系统。

A.1.2命令报文

 

A.1.3命令报文数据域

 

 

 

A.1.4响应报文数据域

A.1.5响应报文状态码

 

 

文件创建示例

创建主文件:文件ID=3F00,主文件大小=100K,删除权限=11,创建权限=22,传输密钥=FFFFFFFFFFFFFFFF。

80E0 3F00 0D 38 FFFF 22 11 FFFFFFFFFFFFFFFF

创建KEY文件:文件ID=0000,文件大小=0100,秘钥添加权限=11,明文添加秘钥。

80E0 0000 07 3F 0100 0F 11 F0 FF

创建二进制文件:文件ID=EF01,文件大小=0020,读权限=F0,写权限=F0,明文读取,明文写入。

80E0 EF01 07 28 0020 F0F0 F0 FF

创建二进制文件:文件ID=EF02,文件大小=0020,读权限=F0,写权限=F0,明文读取,密文Mac更新,维护密钥Id=01。

80E0 EF02 07 28 0020 F0F0 F3 01

创建二进制文件:文件ID=EF03,文件大小=0020,读权限=F0,写权限=F0,密文+MAC读取,密文+MAC更新,维护密钥Id=01。

80E0 EF03 07 28 0020 F0F0 FF 01

创建目录文件:文件ID=DF01,文件大小=0500,删除权限=F0,建立权限=F0,文件名称=5053321564324566。

80E0 DF01 10 38 0500 F0F0 FFFFFF 5053321564324566

创建KEY文件:文件ID=0000,文件大小=0100,密钥添加权限=21,密文+MAC写入密钥。

80E0 0000 07 3F 0100 0F 21 F3 FF

A.2 Update Binary(写二进制文件)

A.2.1 定义与范围

Update Binary命令用于写二进制文件。

A.2.2 注意事项

Update Binary命令只适用于二进制文件。

访问二进制文件的命令:

建立文件(Create File)

选择文件(Select File)

读二进制文件(Read Binary)/写二进制文件(Update Binary)

只有满足二进制文件写权限时才能执行此命令。

A.2.3 命令报文

Lc标识数据域字节数

若为明文方式更新,Lc为要写入数据的长度。

若为线路保护方式更新,Lc为要写入数据的长度加4字节MAC。

若为加密线路保护方式更新,Lc为加密后数据的长度加4字节MAC。

Lc标识数据域字节数

若为明文方式更新,Lc为要写入数据的长度。

若为线路保护方式更新,Lc为要写入数据的长度加4字节MAC。

若为加密线路保护方式更新,Lc为加密后数据的长度加4字节MAC。

A.2.4 命令报文数据域

命令报文数据域包括要写入的新数据。

若为明文方式更新,则为要写入的数据。

若为线路保护方式更新,则为要写入的数据和4字节MAC码。

若为加密线路保护方式更新,则为加密后的数据和4字节MAC码。

用维护密钥加密数据和计算MAC。

A.2.5 响应报文数据域

A.2.6 响应报文状态码

附录B

ASN.1 抽象语法标记1,采用一个个的数据块来描述整个数据结构,每个数据块都由四部分组成:

数据类型标识T

数据长度L

数据V

数据块结束标识(o)

1.关于数据类型T(1个字节)

Bit8

Bit7

Bit6

Bit5

Bit4

Bit3

Bit2

Bit1

首先数据类型包括简单类型和结构类型。

简单类型是不能再分解类型,如整型(INTERGER)、比特串(BIT STRING)、字节串(OCTET STRING)、对象标示符(OBJECT IDENTIFIER)、日期型(UTCTime)等。

结构类型是由简单类型和结构类型组合而成的,如顺序类型

(SEQUENCE, SEQUENCE OF)、选择类型(CHOICE)、集合类型(SET)等。顺序类型的数据块值由按给定顺序成员成员数据块值按照顺序组成;选择类型的数据块值由多个成员数据数据块类型中选择一个的数据块值;集合数据块类型由成员数据块类型的一个或多个值构成。

1.1 Bit8-Bit7:T类型

00:universal(通用类型);

01:application(应用类型);

10:context-specific(特殊内容);

11:private(私有类型)。

1.2 Bit6:判断是否为结构类型

0:简单类型

1:结构类型

1.3 Bit5-Bit1:类型的T值

1.A.1 当Bit8-bit7为00时,bit5-bit1表示不同的unsiversal:


1.3.2如果Bit8-bit7为10(context-specific)时:

[0] : 表示证书的版本

[1] :issuerUniqueID,表示证书发行者的唯一id 

[2] :subjectUniqueID,表示证书主体的唯一id  

[3] :表示证书的扩展字段

例如:SEQUENCE 类型数据块,其TAG类型位UNIVERSAL(00),属于结构类型(1)TAG值为16(10000)所以其类型标示字段值为(00110000),即为0x30。

再如,证书扩展字段类型的数据块,TAG类型为(10),属结构类型(1),TAG的值3(00011),所以其类型标示字段值为(10100011),即为0xA3。

2.数据块长度L(1-128个字节)

 长度字段,有两种编码格式:

2.1若长度值小于等于127,则用一个字节表示,bit8 = 0, bit7-bit1 存放长度值;

2.2 若长度值大于127,则用多个字节表示,可以有2到127个字节。第一个字节的第8位为1,其它低7位给出后面该域使用的字节的数量,从该域第二个字节开始给出数据的长度,高位优先。

2.3 还有一种特殊情况,这个字节为0x80,表示数据块长度不定,由数据块结束标识结束数据块。

3数据块的值V

  存放数据块的值,具体编码随数据块类型不同而不同。

4数据块结束标识(可选)

  结束标示字段,两个字节(0x0000),只有在长度值为不定时才会出现。

版本号(version)
证书序列号(serialNumber)
签名算法标识符(signature)
颁发者名称(issuer)
有效期(validity):起始有效期
终止有效期
主体名称(subject):   countryName 国家
stateOrProvinceName 省份
     localityName 地市
  organizationName 组织名称
organizationalUnitName 机构名称
commanNmae 用户名称
主体公钥信息(subjectPublicKeyInfo)
authorityKeyIdentifier 颁发机构的密钥标识
subjectKeyIdentity 主体密钥标识符
CRLD isstributionPointsCRL 分发点
  • 13
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值