Https协议

理解https协议的内涵,首先学习一些基础知识,了解各种加密算法的方案及其存在的缺陷,从而引出我们为什么采用https协议,及采用此协议的方案。

基础知识:

公钥密码体制分为三个部分,公钥、私钥、加密解密算法,它的加密解密过程如下:

1.1公钥密码体制(public-key cryptography)

加密:通过加密算法和公钥对内容(或者说明文)进行加密,得到密文。加密过程需要用到公钥。

解密:通过解密算法和私钥对密文进行解密,得到明文。解密过程需要用到解密算法和私钥。注意,由公钥加密的内容,只能由私钥进行解密,也就是说,由公钥加密的内容,如果不知道私钥,是无法解密的。

公钥密码体制的公钥和算法都是公开的(这是为什么叫公钥密码体制的原因),私钥是保密的。大家都以使用公钥进行加密,但是只有私钥的持有者才能解密。在实际的使用中,有需要的人会生成一对公钥和私钥,把公钥发布出去给别人使用,自己保留私钥。

1.2、对称加密算法(symmetric key algorithms)

在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的。也就是说,加密和解密都是使用的同一个密钥。因此对称加密算法要保证安全性的话,密钥要做好保密,只能让使用的人知道,不能对外公开。这个和上面的公钥密码体制有所不同,公钥密码体制中加密是用公钥,解密使用私钥,而对称加密算法中,加密和解密都是使用同一个密钥,不区分公钥和私钥。

1.3、非对称加密算法(asymmetric key algorithms)

在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。前面所说的公钥密码体制就是一种非对称加密算法,他的公钥和是私钥是不能相同的,也就是说加密使用的密钥和解密使用的密钥不同,因此它是一个非对称加密算法。

1.4、RSA简介

RSA是一种公钥密码体制,现在使用得很广泛。

RSA密码体制是一种公钥密码体制,公钥公开,私钥保密,它的加密解密算法是公开的。 由公钥加密的内容可以并且只能由私钥进行解密,并且由私钥加密的内容可以并且只能由公钥进行解密。也就是说,RSA的这一对公钥、私钥都可以用来加密和解密,并且一方加密的内容可以由并且只能由对方进行解密

1.5、签名和加密

我们说加密,是指对某个内容加密,加密后的内容还可以通过解密进行还原。 比如我们把一封邮件进行加密,加密后的内容在网络上进行传输,接收者在收到后,通过解密可以还原邮件的真实内容。

这里主要解释一下签名,签名就是在信息的后面再加上一段内容,可以证明信息没有被修改过,怎么样可以达到这个效果呢?一般是对信息做一个hash计算得到一个hash值,注意,这个过程是不可逆的,也就是说无法通过hash值得出原来的信息内容。在把信息发送出去时,把这个hash值加密后做为一个签名和信息一起发出去。 接收方在收到信息后,会重新计算信息的hash值,并和信息所附带的hash值(解密后)进行对比,如果一致,就说明信息的内容没有被修改过,因为这里hash计算可以保证不同的内容一定会得到不同的hash值,所以只要内容一被修改,根据信息内容计算的hash值就会变化。当然,不怀好意的人也可以修改信息内容的同时也修改hash值,从而让它们可以相匹配,为了防止这种情况,hash值一般都会加密后(也就是签名)再和信息一起发送,以保证这个hash值不被修改。至于如何让别人可以解密这个签名,这个过程涉及到数字证书等概念,我们后面在说到数字证书时再详细说明,这里您先只需先理解签名的这个概念

https通信过程的演化:

方案一:.A与B采用明文通信,内容对任何人都开发,若内容是私密信息,显然不安全,怎么办?

                                             

方案二:.A与B之间通信的信息使用秘钥S加密,同时也可采用秘钥S互相解密。在只有A、B两人通信的情况下是安全的。

                                            

方案三:.但在www环境下,通信方式并不是一对一的,一台服务器对应着多个客户端,秘钥对第三方是公开的,显然秘钥加密失去效果。

                                           

方案四:每个客户端分配不同的秘钥,进行对称加密算法 。

                                           

方案五:如何告诉客户端采用独自的秘钥呢?进行协商,但中间人(黑客)易于拦截,获取协商内容,秘钥暴露。

                                          

方案六:为了保证协商内容的安全,对协商内容进行加密。怎么办?采用非对称加密算法,加密使用的密钥和解密使用的密钥是不相同的。私钥只有服务器知道,公钥对所有客户端公开。私钥对协商内容加密,公钥进行解密,公钥对响应的信息加密,只有私钥能解密。

非对称加密算法是为了协商对称加密算法而采取的方案。

 

                                            

方案七: 每个客户端如何获取公钥呢?

方案1:服务端将公钥发放给每一个用户

方案2:服务器将公钥放到某一处远程服务器,客户端可以请求得到。

我们选择方案1,因为方案2,不仅要考虑存放的地方,还要多一次请求,更不安全。

方案1,如果服务器不采取措施直接发放公钥给客户端,公钥也会被中间人截取,从而散失协商信息的保密性,如下图所示:

                                          

那我们又对公钥进行加密?这又回到鸡生蛋,蛋生鸡的恶性循环。

此时我们采用第三方电子书认证的方式来传递公钥至客户端

         有效的证书需要由权威机构CA签名,CA会用自己的私钥来生成数字签名。这个权威机构CA客户端是可以完全信任的,客户端浏览器会安装CA的根证书,由CA签名的证书是被CA所信任的,这就构成了信任链,所以客户端可以信任该服务器的证书。
客户端与服务器建立ssl连接时,服务器将自身的证书传输给客户端,客户端在验证证书的时候,先看CA的根证书是否在自己的信任根证书列表中。再用CA的根证书提供的公钥来验证服务器证书中的数字签名,如果公钥可以解开签名,证明该证书确实被CA所信任。再看证书是否过期,访问的网站域名与证书绑定的域名是否一致。这些都通过,说明证书可以信任。

证书制作流程:

                                           

客户端获取电子证书进行验证的过程:

1)解密加密后证书标号A

2)客户端采用证书中算法,获取证书编号B

3)A、B进行比较,一致就验证通过。

                                         
 

可能大家有疑问:

中间人截取电子证书进行修改怎么办?

    很简单,中间人截取到证书没有用,因为证书编号被第三方私钥加密,中间人修改证书中任何信息,验证都不能通过,所以修改证书这条路径不通。

那中间人不能自已申请证书替换服务器中的证书,获取协商信息?

这可以从两个方面进行解释此法不具有可行性:

第一:第三方AC机构对证书申请者进行严格的身份审查,证书与申请者一一对应,也就是说证书中含有申请者详细信息,中间人拿自已的证书替换服务器端证书,相当于你干坏事时,还把身份证丢给别人,我想他们是不敢这么做的(那不是黑客了,是白客了)。

第二:需验证访问的网站域名与证书绑定的域名是否一致,域名与服务端(或申请者)也是一一对应的。

所以中间人是不会拿自已的证书拦截替换的,只能修改证书或拿别人证书拦截,但这都没办法获取协商信息,因为秘钥不在他手上,他没法解密。

这个验证至少能说明两个问题:

1)这个证书未被修改。(修改,验证不能通过)

2)这个证书确实是所访问服务器的证书(访问的网站域名与证书绑定的域名(域名与服务也是一一对应的)是否一致,也能说明证书是服务端发过来的)。

为了进一步确认证书确实是所访问服务器发送过来的,还可以进行下一步操作:

接下来客户端使用服务器证书里面的公钥进行服务器身份的验证。 客户端生成一个随机数给到服务器。 服务器对随机数进行签名,并回传给到客户端。 客户端用服务器证书的公钥对随机数的签名进行验证,若验证通过,则说明对应的服务器确实拥有对应服务器证书的私钥,因此判断服务器的身份正常。否则,则任务服务器身份被伪造。这些都没问题才说明服务器是可信的。

接下来客户端会生成会话密钥,使用服务器公钥加密。服务器用自己的私钥解密后,用会话密钥加密数据进行传输。ssl连接就建立了。

https请求流程大致如下:

1.客户端发起一个https请求:

     a)客户端支持的加密方式

     b)客户端生成的随机数(第一个随机数)

2.服务端收到请求后,拿到随机数,返回以下内容:

      a)数字证书(颁发机构(CA)、证书内容本身的数据签名(使用第三方机构的私钥加密)、证书持有者的公钥、证书签名用到的hash算法)

     b)生成一个随机数、返回给客户端(第二个随机数)

3.客户端拿到证书以后做验证

    a)根据颁发机构找到本地的根证书

    b)根据CA得到根证书的公钥(第三方机构CA的私钥对应),通过公钥对数字签名解密,得到证书的内容摘要A

    c)用证书提供的算法对证书内容进行摘要,得到摘要B

    d)通过A和B的对比,也就是验证数字签名

4.客户端验证通过后,生成一个随机数(第三个随机数),通过证书内的公钥对这个随机数加密,发送给服务器端

5.(随机数1+2+3)通过对称加密得到一个秘钥(会话秘钥)

6.通过会话秘钥对内容进行对称加密传输。

 

参考:http://www.cnblogs.com/JeffreySun/archive/2010/06/24/1627247.html

参考:https://www.cnblogs.com/zhangshitong/p/6478721.html

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值