数字证书的重要性

在讨论数字证书之前,我们先用讨论一下网络通信安全。
网络通信的流程大致为:
1.身份鉴别
2.数据完整性鉴别
3.数据的保密性

我们来看一个中间人攻击的例子:
假设A要与B进行通信,但是在A和B都不知情的情况下通信内容是被邪恶用户C进行转发的。
1.C冒充B与A通信,将自己的公钥发送给A,说自己是B,然后A就误认为该公钥就是B的公钥,将自己的信息和公钥用C的公钥加密后发送给C,
2.C用自己的私钥解密该信息,获得明文和A的公钥后,再与B通信将自己的公钥发送给B,说自己是A,然后B就产生和A一样的行为。
3.如此C就获得了A和B的公钥然后可以随意和A、B通信,甚至随意篡改内容。而A与B仍然不知情。

上面的例子我们可以看出身份鉴别、数据完整性鉴别和数据保密性的重要性了,由于A、B没有对对方的身份进行鉴别,所以让C有机可乘。没有使用任何对数据完整性鉴别的方法,所以即使C对通信内容做了任何篡改,A、B都是不知情的。没有对通信信息进行加密,所以C就可以的获得A、B通信的内容。

那么接下来我们就来讨论一下如何在通信中做到这三点。
1.身份鉴别
如何做到身份鉴别呢?
从上面的例子,我们可以知道,A要证明自己通信的对象就是B的至关重要的点就在于证明自己获得的公钥是B的公钥,而不是邪恶用户C的公钥。那么如何证明呢?这就要请一位A与B都非常信任的具有权威性的D来认证了,这个D就是CA认证中心了。
那么CA是如何证明公钥的呢?这就涉及到数字证书了。
那么我们再来说说数字证书吧。
就用B来举例:首先B需要向CA申请证书,然后CA要做哪些事情呢?
1.首先B自己生成一对公钥B_pub和私钥B_key,然后将自己的一些信息和公钥打包成issuer发给CA。
2.CA先将B的issuer以及自己的一些信息用明文的形式写在数字证书里,然后使用摘要算法(指纹算法)对数字证书获得摘要(指纹),然后用自己的私钥对摘要加密,生成数字签名附在附在证书上。
3.将数字证书发送给B

然后B如何用数字证书来证明自己的身份呢?我们回到上面的例子,首先A请求B发送数字证书,B将自己的数字证书发送给A,A获得数字证书后,首先查看该证书的颁发机构,然后在自己信任的机构中查看有没有该机构,如果没有,则证书本身就不可信任。如果找到该机构,就从之前安装好的该机构的根证书中获得该机构的公钥,对B的数字证书的数字签名进行解密,获得证书的摘要和摘要算法,然后用该摘要算法对证书获取摘要,对比两个摘要,如果不一致,说明被证书被篡改或不是CA颁发的证书。如果一致,则说明该证书没有被篡改以及该证书中的公钥就是B的公钥。如此一来,就证明了B的身份。当然,A的身份鉴别方法也是一样的。

2.数据的完整性鉴别
在第一步时我们通过数字证书的方法可以让A、B之间进行身份鉴别,这样A和B就真正的获得了对方的公钥了,在这个基础上保证数据的完整性就比较简单了,其实在第一步中的CA证书鉴别时就用到了保证数据完整性的方法。就是用自己的私钥对数据的摘要(指纹)进行加密。例如:
1.A在向B发送数据时,首先对数据获得摘要,然后用自己的私钥对摘要和摘要算法生成数字签名,最后将数字签名附在要发送的数据之后一起发送给B。
2.B获得数据后首先从数据中分离出摘要,然后用A的公钥进行解密,获得摘要和摘要算法,然后再用该摘要算法对数据取摘要,比较两个摘要是否一致,如果一致则说明数据未被篡改。
注意:由于只有A有自己的私钥,所以就算C截获到该数据,对数据篡改后,也无法使用A的私钥进行签名,因为C没有A的私钥

3.数据保密性
在上述例子中,由于A和B都有对方的公钥,完全可以直接使用公钥对全文进行加密,然后发送给对方,因为只有A、B有私钥。
但是在日常的网络通信中,比如https进行通信时,一般只有客户端对服务器进行身份认证,而不需要服务器对客户算进行认证(除非你开启了双向认证)。
在这种情况下,就不能用刚才的方法保证数据保密性了,那https通信是怎么进行数据加密传输的呢?这就涉及到对称密钥加密方法了。
假设B是服务器,A是访客。当用之前的身份鉴别法,A可以鉴定B是自己要通信的服务器,并且获得了B的公钥,在这期间,A与B还做了另一件事情,那就是加密算法的协商过程。
1.A向B发送请求,请求中说明自己支持哪些加密算法。
2.B接收到后返回响应,响应中包含数字证书并说明自己支持哪些加密算法。
3.A接收到后通过数字证书对B进行身份鉴别,获得B的公钥,将自己选择的加密算法及生成的对称密钥通过B的公钥加密后发送给B,然后B回复确认。
4.A、B就用协商好的对称密钥及加密算法进行加密通信。

从以上的分析过程就可已看出,安全通信都是围绕着数字证书(身份鉴别功能)进行的,数据证书的重要性是不言而喻的。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值