X.509数字证书

1、简介

       X.509是被广泛使用的数字证书标准:是由国际电联电信委员会为单点登录和授权管理基础设施制定的PKI标准。

        X.509定义了(但不仅限于)公钥证书、证书吊销清单、属性证书和证书路径验证算法等证书标准。

        X.509数字证书:由用户公钥和用户标识符组成。此外还包括版本号、证书序列号、CA标识符、签名算法标识、签发者名称、证书有效期等信息。

2、版本

        1)X.509 v1:设定了一系列严格的CA分级体系来颁发数字证书。和其他网络信任模型对比,任何人,不仅仅是特定的CA,可以签发并验证其他密钥证书的有效性。

        2)X.509 v2: 引入了主体和签发人唯一标识符的概念,以解决主体和/或签发人名称在一段时间后可能重复使用的问题。(未广泛使用)

        3)X.509 v3 :增加支持扩展的概念,因此任何人均可定义扩展并将其纳入证书中。现在常用的扩展包括:KeyUsage(仅限密钥用于特殊目的,例如“只签”)和 AlternativeNames(允许其它标识与该公钥关联,例如 DNS 名、电子邮件地址、IP 地址)。扩展可标记为“极重要”,以表示应选中该扩展并强制执行或使用。(使用最广)

3、结构 

4、编码

        1)结构概述

        X.509证书的结构是用ASN1(Abstract Syntax Notation One)进行描述数据结构,并使用ASN1语法进行编码。

        ASN1采用一个个的数据块来描述整个数据结构,每个数据块都有四个部分组成:

类型标识(1字节)

长度(1字节)

值(不定长)

结束标识(2字节)

        a、数据块数据类型标识(一个字节)

        简单类型:不能再分解类型,如整型、比特串、字节串、对象标示符、日期型等。

        结构类型:由简单类型和结构类型组合而成的,如顺序类型、选择类型、集合类型等。

        b、数据块长度(1-128个字节)

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

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

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

        c、数据块的值

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

        d、数据块结束标识(可选)

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

        2)类型标识定义

bit7

bit6

bit5

bit4

bit3

bit2

bit1

bit0

标示 TAG 类型

结构体

类型的TAG

        a、Bit7-bit6用来标示TAG类型

        (00) universal:普通类型,如:

                BOOLEAN            [有两个值:falsetrue]

                INTEGER             [整型值]

                BIT STRING         [0位或多位]

        (01) application:

        (10) context-specific: 特殊内容, bit4-bit0的值含义如下:

                [0] –- 表示证书的版本

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

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

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

        (11) private:

        b、Bit5表示是否为结构类型

        1是结构类型,0是简单类型。

        c、Bit4-bit0是类型的TAG值

        根据bit7-bit6的不同值有不同的含义

5、文件格式

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

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

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

        4).p10是证书请求。

        5).p7rCA对证书请求的回复,只用于导入

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

6、openssl创建根证书

        1)创建根证私钥

openssl genrsa -out root-key.key 1024

        2)创建根证书请求文件

openssl req -new -out root-req.csr -key root-key.key -keyform PEM

        3)自签根证书

openssl x509 -req   -extfile /etc/pki/tls/openssl.cnf -extensions v3_req  -in root-req.csr -out root-cert.cer -signkey root-key.key -CAcreateserial -days 3650

         重要说明: -extfile /etc/pki/tls/openssl.cnf -extensions v3_req  参数是生成 X509 V3 版本的证书的必要条件。 /etc/pki/tls/openssl.cnf  是系统自带的OpenSSL配置文件,该配置文件默认开启 X509 V3 格式

        4) 导出p12格式根证书

openssl pkcs12 -export -clcerts -in root-cert.cer -inkey root-key.key -out root.p12

7、openssl颁发证书 

        1)生成客户端key

openssl genrsa -out client-key.key 1024

        2)生成客户端请求文件

openssl req -new -out client-req.csr -key client-key.key

        3)生成客户端证书,使用根证书签名

openssl x509 -req -extfile /etc/pki/tls/openssl.cnf -extensions v3_req -in client-req.csr -out client-cert.cer -signkey client-key.key -CA root-cert.cer  -CAkey root-key.key -CAcreateserial -days 3650

        4)生成客户端p12格式根证书

openssl pkcs12 -export -clcerts -in client-cert.cer -inkey client-key.key -out client.p12

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


学习编程是顺着互联网的发展潮流,是一件好事。新手如何学习编程?其实不难,不过在学习编程之前你得先了解你的目的是什么?这个很重要,因为目的决定你的发展方向、决定你的发展速度。
IT行业是什么工作做什么?IT行业的工作有:产品策划类、页面设计类、前端与移动、开发与测试、营销推广类、数据运营类、运营维护类、游戏相关类等,根据不同的分类下面有细分了不同的岗位。
女生学Java好就业吗?女生适合学Java编程吗?目前有不少女生学习Java开发,但要结合自身的情况,先了解自己适不适合去学习Java,不要盲目的选择不适合自己的Java培训班进行学习。只要肯下功夫钻研,多看、多想、多练
Can’t connect to local MySQL server through socket \'/var/lib/mysql/mysql.sock问题 1.进入mysql路径
oracle基本命令 一、登录操作 1.管理员登录 # 管理员登录 sqlplus / as sysdba 2.普通用户登录
一、背景 因为项目中需要通北京网络,所以需要连vpn,但是服务器有时候会断掉,所以写个shell脚本每五分钟去判断是否连接,于是就有下面的shell脚本。
BETWEEN 操作符选取介于两个值之间的数据范围内的值。这些值可以是数值、文本或者日期。
假如你已经使用过苹果开发者中心上架app,你肯定知道在苹果开发者中心的web界面,无法直接提交ipa文件,而是需要使用第三方工具,将ipa文件上传到构建版本,开...
下面的 SQL 语句指定了两个别名,一个是 name 列的别名,一个是 country 列的别名。**提示:**如果列名称包含空格,要求使用双引号或方括号:
在使用H5混合开发的app打包后,需要将ipa文件上传到appstore进行发布,就需要去苹果开发者中心进行发布。​
+----+--------------+---------------------------+-------+---------+
数组的声明并不是声明一个个单独的变量,比如 number0、number1、...、number99,而是声明一个数组变量,比如 numbers,然后使用 nu...
第一步:到appuploader官网下载辅助工具和iCloud驱动,使用前面创建的AppID登录。
如需删除表中的列,请使用下面的语法(请注意,某些数据库系统不允许这种在数据库表中删除列的方式):
前不久在制作win11pe,制作了一版,1.26GB,太大了,不满意,想再裁剪下,发现这次dism mount正常,commit或discard巨慢,以前都很快...
赛门铁克各个版本概览:https://knowledge.broadcom.com/external/article?legacyId=tech163829
实测Python 3.6.6用pip 21.3.1,再高就报错了,Python 3.10.7用pip 22.3.1是可以的
Broadcom Corporation (博通公司,股票代号AVGO)是全球领先的有线和无线通信半导体公司。其产品实现向家庭、 办公室和移动环境以及在这些环境...
发现个问题,server2016上安装了c4d这些版本,低版本的正常显示窗格,但红色圈出的高版本c4d打开后不显示窗格,
TAT:https://cloud.tencent.com/document/product/1340