• 进入"运维那点事"后,希望您第一件事就是阅读“关于”栏目,仔细阅读“关于Ctrl+c问题”,不希望误会!

信息安全之PKI及数字证书介绍(四)

信息安全 彭东稳 9年前 (2015-12-17) 29112次浏览 已收录 0个评论

一、前言

前面已经介绍过数据内容加密和数据完整性方面的知识,那么对于身份认证的实现,前面也说了是基于数字签名实现。在介绍数字签名的时候也说了,解密对方的私钥需要有对方的公钥,那么问题来了。我们怎么才能得到对方的公钥呢?

当然你可以选择把公钥放在U盘里,快递过去,也可以自己送过去。这种只能适用于通信双方可以从某种程度上建立联系,比如企业内部邮件来往认证,两个银行系统之间认证。但是这种方式并不适用于大多数情况,比如互联网中两个没有任何关联的人需要建立安全连接。

就拿现在的HTTPS来说,ClientServer通信为了保证数据的安全性,首先Client需要获取到Server端的公钥。怎么获取呢?双方又不认识也无法建立某种联系,所以现实中的实现方式就是在你访问HTTPS网站时首先会自动下载此网站的公钥。那么这个时候问题又来了,你怎么保证你下载到的公钥就是你要访问的网站公钥呢?而不是他人冒充的呢?

这些问题在现实中,是使用证书的方式解决的,什么是证书呢?其实就是一个第三方,它来保证你得到公钥的个合法性。大概过程如下:

CA:就是那个第三方机构,负责证书的生成与管理。然后自身会有一对公钥和私钥,公钥会做成证书,提供给USER方(默认这个证书在系统中或浏览器中)。

HTTPS:需要先向CA购买或其他方式申请到证书,一般需要提供域名,地区等信息。然后CA提供商会给你证书(这个证书上会有公钥信息,以及它是经过CA私钥签名过的,用来保证合法性),私钥等信息。然后HTTPS方会把证书跟私钥部署在网站上,就可以用来加密数据了。

USER:当用户访问HTTPS时会下载网站证书,然后大概用CA的证书带的公钥去验证证书。如果一切都对的上,那么证明此公钥是受信任的。

上面只是大概说一下过程,很多细节方面没有介绍,整个第三方认证机构也是有一套完整的机制的,那就是PKI和数字证书。下面详细介绍。

二、PKI介绍

PKI(public key infrastructure)公钥基础设施,通过使用公钥技术和数字证书来确保系统信息安全并负责验证数字证书持有者身份的一种体系。

通常来讲PKI(公钥基础设施)包含如下部分:

End entity:终端实体,可以是一个终端硬件或者网站。

CA:证书签发机构。

RA:证书注册及审核机构。比如审查申请网站或者公司的真实性。

CRL issuer:负责证书撤销列表的发布和维护。

Repository:负责数字证书及CRL内容存储和分发。

三、CA的作用

CACertificate Authority)系统是PKI体系的核心,主要实现数字证书的发放和管理及密钥管理等功能。而数字证书就是由权威公正的CA中心签发,是网络用户的身份证明。使用数字证书,结合数字签名、数字信封等密码技术,可以实现对网上用户的身份认证,保障网上信息传送的真实性、完整性、保密性和不可否认性。

  • 处理证书申请
  • 鉴定申请者是否有资格接收证书
  • 证书的发放
  • 证书的更新
  • 接收最终用户数字证书的查询、撤销
  • 产生和发布证书吊销列表(CRL
  • 数字证书的归档
  • 密钥归档
  • v1历史数据归档

四、数字证书

数字证书是一种数字标识,如同我们的身份证一样,是网络上的身份证明,它是由证书授权机构(CA)签名颁发的数字文件,该证书使得第三者不能伪造和篡改证书。数字证书目前已广泛应用于安全电子邮件、网上商城、网上办公、网上签约、网上银行、网上证券、网上税务等行业和业务领域。我们最常见的应用就是HTTPS协议了。

数字证书的作用?

  1. 身份授权,确保浏览器访问的网站是经过 CA 验证的可信任的网站。
  2. 分发公钥,每个数字证书都包含了注册者生成的公钥。在SSL握手时会通过certificate消息。

传输给客户端,比如前文提到的RSA证书公钥加密及ECDHE的签名都是使用的这个公钥。

数字签名

申请者拿到CA的证书并部署在网站服务器端,那浏览器发起握手接收到证书后,如何确认这个证书就是CA签发的呢?怎样避免第三方伪造这个证书?答案就是数字签名(digital signature)。数字签名是证书的防伪标签,前面专门对于数字签名做了讲解,而证书的整个信任链中,数字签名也是不可或缺的组成部分之一。目前使用最广泛的 SHA-RSA 数字签名的制作和验证过程如下:

  1. 数字签名的签发,首先是使用哈希函数对待签名内容进行安全哈希,生成消息摘要,然后使用 CA 自己的私钥对消息摘要进行加密。
  2. 数字签名的校验,使用 CA 的公钥解密签名,然后使用相同的签名函数对待签名证书内容进行签名并和服务端数字签名里的签名内容进行比较,如果相同就认为校验成功。

数字签名是如何完成与手写签名类似的功能的呢?如果报文在网络传输过程中被修改,接收方收到此报文后,使用相同的摘要算法将计算出不同的报文摘要,这就保证了接收方可以判断报文自签名后到收到为止,是否被修改过。如果发送方A想让接收方误认为此报文是由发送方B签名发送的,由于发送方A不知道发送方B的私钥,所以接收方用发送方B的公钥对发送方A加密的报文摘要进行解密时,也将得出不同的报文摘要,这就保证了接收方可以判断报文是否是由指定的签名者发送。同时也可以看出,当两个散列值相同时,发送方B无法否认这个报文是他签名发送的。

这里有几点需要说明:

1) 数字签名签发和校验使用的密钥对是CA自己的公私密钥,跟证书申请者提交的公钥没有关系。

2) 数字签名的签发过程跟公钥加密的过程刚好相反,即是用私钥加密,公钥解密。

3) 现在大的CA都会有证书链,证书链的好处一是安全,保持根CA的私钥离线使用。第二个好处是方便部署和撤销,即如果证书出现问题,只需要撤销相应级别的证书,根证书依然安全。

4) CA证书都是自签名,即用自己的公钥和私钥完成了签名的制作和验证。而证书链上的证书签名都是使用上一级证书的密钥对完成签名和验证的。

5) 怎样获取根CA和多级CA的密钥对?它们是否可信?当然可信,因为这些厂商跟浏览器和操作系统都有合作,它们的公钥都默认装到了浏览器或者操作系统环境里。比如firefox 就自己维护了一个可信任的CA列表,而chrome IE使用的是操作系统的CA列表。

五、证书的申请过程

1)  终端实体生成公私钥和证书请求。

2)  RA检查实体的合法性,如果个人或者小网站,这一步不是必须的。

3)  CA签发证书,发送给申请者。

4) 证书更新到repository,终端后续从repository 更新证书,查询证书状态等。

六、数字证书格式X509包含哪些内容还有pkcs12)

1)  TBS Certificateto be signed certificate,待签名证书内容),这部分包含了 10 个要素,分别是版本号,序列号,签名算法标识,发行者名称,有效期,证书主体名,证书主体公钥信息,发行商唯一标识,主体唯一标识,扩展等。

2)  签名算法标识(signatureAlgorithm),指定对tbsCertificate 进行签名的算法。

3)  签名值(signaturValue),使用 signatureAlgorithm tbsCertificate 进行计算得到签名值。

七、CA的构建

CA建立自上而下的信任链,下级CA信任上级CA,下级CA由上级CA颁发证书并认证。如果你有一定的资质可以申请企业CA,那么这个时候你就可以自签证书在互联网上使用了。因为证书链之间的信任关系是相互的。如果你是企业内部想使用CA的话,那么就可以建立自己的私有CA,在LinuxOpenSSL就可以建立私有CA

在整个CA链中,CA根据种类又分为行业CA、区域性CA、独立CA等不同的种类。总而言之,CA是保证电子商务等安全数据传输的根本。


如果您觉得本站对你有帮助,那么可以支付宝扫码捐助以帮助本站更好地发展,在此谢过。
喜欢 (0)
[资助本站您就扫码 谢谢]
分享 (0)

您必须 登录 才能发表评论!