二、PKIPublic Key Infrastructure(PKI) , 中文公钥基础设施 , 由一系列实体组成的集合体 , 用于向客户端提供可信的服务器身份认证 。
X.509PKI的标准规定PKI的设计、实施和运营 , PKI事实上的标准是X.509 。
X.509来自于国际电信联盟电信标准(ITU-T)的X.500标准 , 发展主要历史:
- X.209 1988
- X.500 1993 , ISO组织接受的目录服务系统标准 , 定义了一个机构如何在全局范围内共享其名字和与之相关的对象 。X.500是分层次的 , 其中的管理域(机构、分支、部门和工作组)可以提供这些域内的用户和资源信息 。在PKI体系中 , X.500被用来惟一标识一个实体 , 该实体可以是机构、组织、个人或一台服务器 。X.500被认为是实现目录服务的最佳途径 , 但X.500的实现需要较大的投资 , 并且比其他方式速度慢;而其优势具有信息模型、多功能和开放性 。
- X.509 1993 由国际电信联盟(ITU-T)制定的数字证书标准 , 最初版本公布于1988年 。X.509证书由用户公共密钥和用户标识符组成 。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息 。这一标准的最新版本是X.509 v3 。
1. ASN.1ASN.1是数据结构描述语言 , 由ITU-T定义的标准 , 用来结构化描述证书 。它有两部分:
- ISO 8824/ITU X.208 描述信息内的数据、数据类型及序列格式 , 也就是数据的语法;
- ISO 8825/ITU X.209 描述如何将各部分数据组成消息 , 也就是数据的基本编码规则 。
X.509定义了证书应该包含的内容 , 而ASN.1是具体的数据结构 。
2. 证书结构3.2.1 证书的主要结构:
Certificate ::= SEQUENCE {tbsCertificateTBSCertificate,signatureAlgorithmAlgorithmIdentifier,# 签名算法signatureBIT STRING# 签名值}
SEQUENCE是ASN.1中的一个结构体 , 包括多个属性 。属性还可以嵌套其它的ASN.1结构 。TBSCertificate就是一个SEQUENCE结构 。3.2.2. TBSCertificate结构:
TBSCertificate ::= SEQUENCE { version [0] EXPLICIT Version DEFAULT v1, -- 证书版本号 serialNumber CertificateSerialNumber,-- 证书序列号 , 对同一CA所颁发的证书 , 序列号唯一标识证书 signature AlgorithmIdentifier,--证书签名算法标识 issuer Name,--证书发行者名称 , 简称DN validity Validity,--证书有效期 subject Name,--证书主体名称 subjectPublicKeyInfo SubjectPublicKeyInfo,--证书公钥 issuerUniqueID [1] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书发行者ID(可选) , 只在证书版本2、3中才有 subjectUniqueID [2] IMPLICIT UniqueIdentifier OPTIONAL,-- 证书主体ID(可选) , 只在证书版本2、3中才有 extensions [3] EXPLICIT Extensions OPTIONAL-- 证书扩展段(可选) , 只在证书版本3中才有}
3.2.3 签名算法签名算法标识符AlgorithmIdentifier类型也是一个SEQUENCE结构 , 由两个属性构成:AlgorithmIdentifier ::= SEQUENCE {algorithm OBJECT IDENTIFIER,parameters ANY DEFINED BY algorithm OPTIONAL }
3.2.4 issuer 示例Let’s Encrypt:C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X33.2.5 validity有效期 , 结构:
Validity ::= SEQUENCE{notBefore Time,notAfterTime}
3. CSR服务器实体为了证明自己的身份 , 要向CA机构申请证书 。在申请之前 , 先生成一个CSR(Certificate Signing Request)文件 , 即证书签名请求文件 , 把这个CSR文件发给CA机构 。CA机构使用其根证书私钥签名就生成了证书公钥文件 , 也就是颁发给用户的证书 。CSR文件包括两部分:
- 生成证书必须的信息 , 如域名、公钥
- 服务器实体的证明材料
CertificationRequest ::= SEQUENCE {certificationRequestInfoCertificationRequestInfo,# 证书的请求信息signatureAlgorithmAlgorithmIdentifier,# 签名算法signatureBIT STRING# 签名信息}
3.3.2 CertificationRequestInfo结构:CertificationRequestInfo ::= SEQUENCE{versionINTEGER { v1(0)}(v1,...),subjectName,subjectPKInfoSubjectPublicKeyInfo,attributes[0] Attributes}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 详解Java面向对象开发,给你不一样的体验
- 你在开发API时是如何设计签名验证的?
- 味道|曾开发可以舔的电视:日本研究人员推出增强咸味的筷子
- 程序员效率神器:shell命令蜕变,用颜色划出重点
- 十年架构师吐血整合Java开发必备宝典,凭借这份宝典定级腾讯T3-4
- 你如何理解敏捷开发?
- 服务器系统哪家强 Ubuntu Server与CentOS
- 微信小程序开发,多端框架全面测评
- 今日给大家推荐一个java开发神器-EasyCode
- linux服务器内存异常,究竟在哪消耗了2.5G?