linux : X.509数字证书

什么是X.509数字证书
X.509是密码学里公钥证书的格式标准。X.509证书已应用在包括TLS/SSL在内的众多网络协议里,同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

除了证书本身功能,X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。
历史以及使用情况
X.509最早与X.500一起发布于1988年7月3日。它假设有一套严格的层次化的证书颁发机构(CA)。和web信任模型相比较,PGP采用的方案是任何人都可以签名,从而证明其他人密钥证书的有效性。X.509 v3证书设计非常弹性化,除了对网桥拓扑架构网络的支持,还可以支持用于点对点方式的Mesh网[1]类似与OpenPGP那样的web信任机制,不过这样方式在2004年之前很少使用。X.500系统仅由主权国家实施,以实现国家身份信息共享条约的实施目的;而IETF的公钥基础设施(X.509)简称PKIX工作组将该标准制定成适用于更灵活的互联网组织。而且事实上X.509认证指的是RFC5280里定义的X.509 v3,包括对IETF的PKIX证书和证书吊销列表,通常也称为公钥基础设施。
非对称加密
有两个密钥,一个是 Key_1,另一个是 Key_2。

一段明文通过某种加密算法用 Key_1 加密之后的密文只能用 Key_2 解密,而不能还是用 Key_1 解密。

反过来,明文用 Key_2 加密之后的密文只能用 Key_1 解密,而不能还是用 Key_2 解密。

满足这种特征的加密算法称为非对称加密算法。

目前常用的非对称加密算法有 RSA、DSA 等。

摘要算法
将各种不定长的「数据」经过某种算法处理之后,总是能生成一段定长的数据。这段定长的数据称之为「散列值」。

这种算法如果可以满足以下特征,则可以称为摘要算法。

可以轻松地将各种不定长的「数据」生成「散列值」。
不能通过「散列值」来反推出原「数据」。
不能找出具有相同「散列值」的另一个「数据」。
目前常用的摘要算法有 MD5、SHA-1、SHA-256 等。
证书
在X.509里,组织机构通过发起证书签名请求(CSR)来得到一份签名的证书。首先需要生成一对密钥对,然后用其中的私钥对CSR进行签名,并安全地保存私钥。CSR进而包含有请求发起者的身份信息、用来对此请求进行验真的的公钥以及所请求证书专有名称。CSR里还可能带有CA要求的其它有关身份证明的信息。然后CA对这个专有名称发布一份证书,并绑定一个公钥。 组织机构可以把受信的根证书分发给所有的成员,这样就可以使用公司的PKI系统了。像Firefox,Internet Explorer,Safari,Opera以及Google Chrome都预装有可信任的根证书列表,所以主流CA发布的TLS证书都直接可以正常使用。浏览器的开发者直接影响着它的用户对CA的信任。X.509也定义了CRL实现标准。另一种检查合法性的方式是OCSP。
X.509 数字证书结构图
在这里插入图片描述
证书文件扩展名
X.509有多种常用的扩展名。不过其中的一些还用于其它用途,就是说具有这个扩展名的文件可能并不是证书,比如说可能只是保存了私钥。

.pem – (隐私增强型电子邮件) DER编码的证书再进行Base64编码的数据存放在"-----BEGIN CERTIFICATE-----“和”-----END CERTIFICATE-----"之中
.cer, .crt, .der – 通常是DER二进制格式的,但Base64编码后也很常见。
.p7b, .p7c – PKCS#7 SignedData structure without data, just certificate(s) or CRL(s)
.p12 – PKCS#12格式,包含证书的同时可能还有带密码保护的私钥
.pfx – PFX,PKCS#12之前的格式(通常用PKCS#12格式,比如那些由IIS产生的PFX文件)
PKCS#7 是签名或加密数据的格式标准,官方称之为容器。由于证书是可验真的签名数据,所以可以用SignedData结构表述。 .P7C文件是退化的SignedData结构,没有包括签名的数据。

PKCS#12 由PFX进化而来的用于交换公共的和私有的对象的标准格式 。
数字签名流程
在这里插入图片描述
数字证书的签署流程
以rsa举例
1构建根证书

根认证机构「CA」生成公钥 ca_KeyPub 和私钥 ca_KeyPri,以及基本信息表 ca_Info。ca_Info 中一般包含了「CA」的名称、证书的有效期等信息。
根认证机构「CA」对(ca_KeyPub + ca_Info)进行散列运算,得到散列值 ca_Hash。
根认证机构「CA」使用其私钥 ca_KeyPri 对 ca_Hash 进行非对称加密,得到加密的散列值 enc_ca_Hash。
根认证机构「CA」将(ca_KeyPub + ca_Info + enc_ca_Hash)组合生成自签名的数字证书「ca_Cert」。这张证书称之为根证书。
根证书「ca_Cert」包含的内容:ca_KeyPub + ca_Info + enc_ca_Hash。

「ca_Cert」可用于签署下一级的证书。

2.单级认证机构的证书签署

服务器「S」生成公钥 s_KeyPub 和私钥 s_KeyPri,以及基本信息表 s_Info。s_Info 中一般包含了「S」的名称、证书要求的有效期等信息。
服务器「S」将 s_KeyPub、s_Info 送给根认证机构「CA」。
根认证机构「CA」通过某种方式验证「S」的身份之后,再加上根认证机构自己的一些信息 ca_Info,然后对它们(s_KeyPub + s_Info + ca_Info)进行散列运算,得到散列值 s_Hash。
根认证机构「CA」使用其私钥 ca_KeyPri 对 s_Hash 进行非对称加密,得到加密的散列值 enc_s_Hash。
根认证机构「CA」将(s_KeyPub + s_Info + ca_Info + enc_s_Hash)组合签署成数字证书「s_Cert」并回送给「S」。
服务器证书「s_Cert」包含的内容:s_KeyPub + s_Info + ca_Info + enc_s_Hash。

「s_Cert」不可用于签署下一级的证书。

二级(或以上)认证机构的验证

服务器「S2」下发证书「s2_Cert」、「ca2_Cert」给客户端「C」。
客户端「C」检查到「s2_Cert」中的 ca2_Info,发现它是由「CA2」签署的。
客户端「C」取出「ca2_Cert」中的 ca2_KeyPub,对「s2_Cert」中的 enc_s2_Hash 进行解密得到 s2_Hash。
客户端「C」对「s2_Cert」中的(s2_KeyPub + s2_Info + ca2_Info)进行散列运算,得到散列值 s2_Hash_tmp。
客户端「C」判断 s2_Hash 和 s2_Hash_tmp 是否相等。如果两者相等,则证明「s2_Cert」是由「ca2_Cert」签署的。
客户端「C」检查到「ca2_Cert」中的 ca_Info,发现它是由「CA」签署的。
客户端「C」取出「ca_Cert」中的 ca_KeyPub,对「ca2_Cert」中的 enc_ca2_Hash 进行解密得到 ca2_Hash。
客户端「C」对「ca2_Cert」中的(ca2_KeyPub + ca2_Info + ca_Info)进行散列运算,得到散列值 ca2_Hash_tmp。
客户端「C」判断 ca2_Hash 和 ca2_Hash_tmp 是否相等。如果两者相等,证明「ca2_Cert」是由「ca_Cert」签署的。
客户端「C」检查「ca_Cert」,发现该证书是根证书,且已经被系统信任,身份验证通过。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值