HTTP的缺点:算法
HTTPS(HTTP Secure,超文本传输安全协议),这里的S是Secure的缩写,可是我以为理解为HTTP over SSL更合适一些。浏览器
HTTPS实际上就是先用SSL创建一个安全通讯线路,而后在这条线路上进行HTTP通讯。至关于在HTTP和TCP之间增长了一层SSL层。安全
近代加密技术中:加密算法是公开的,密钥是保密的。(经过这种方法保持加密方法的安全性)服务器
加密技术分为两类:一种叫共享密钥加密,又称对称密钥加密;一种叫公开密钥加密,又称非对称密钥加密。网络
共享密钥加密:加密
加密和解密用同一个密钥。对象
只要拿到密钥就能够破解全部用该密钥加密的报文。blog
以共享密钥方式加密时,必须先把密钥安全地告诉对方。这就造成了一个悖论:没有密钥就不能加密,不能加密就可能会被窃听,要想不被窃听就要加密,可是没有密钥因此不能加密。内存
公开密钥加密:资源
使用一对非对称的密钥,一把叫作私钥,一把叫作公钥。
公开密钥能够随意发布,任何人均可以得到。私有密钥不能让其余任何人知道。
在这种方式下,发送密文的一方先向对方请求对方的公钥,而后使用对方的公钥对要发送的信息进行加密处理,对方收到被加密的信息后,再使用本身的私钥进行解密。
公开密钥至关于锁,私有密钥至关于钥匙。我把锁公开出去(这里的公开出去是说只要向我请求我就把个人锁送给你一份),想要给我发消息的就用这把锁把消息锁起来而后发给我,只有我有钥匙,因此只有我能打开这把锁看到要发给个人消息。
公开密钥加密与共享密钥相比多了一次通讯:要先请求对方的公钥。所以公开密钥加密效率低一些。
SSL使用的加密方法是共享密钥加密。
HTTPS中的加密方式:混合密钥加密 = 公开密钥加密 + 共享密钥加密
难道公开密钥加密就是万全之策了吗?
答案是否认的。
其实和共享密钥方式存在相同的问题,那就是密钥传递过程的安全没法保证,这一步是未经加密的,不论对共享密钥方式仍是公开密钥方式都是同样的。
可是由于在共享密钥方式中只有一个密钥,这个密钥既能够用来加密也能够用来解密,因此它一旦泄露就意味着整个加密体系被破解了,因此问题比较严重。
而公开密钥方式中在密钥传递过程当中传递的是公钥,是发方用来在发送报文时加密的,不能用来解密因此不用担忧其它密文会被破解,可是若是公钥被篡改了,也就是公钥若是不正确,那么就会致使发方发出的信息收方没法破解。
公钥证书的提出是为了保证 公开密钥方式中 客户端拿到的公钥 就是 客户端想要访问的那台服务器的公钥。
CA:数字证书认证机构,能够信赖的第三方机构。
使用公钥证书的流程:
(1)服务器将本身的公开密钥提交给CA,申请CA为本身的公钥颁发公钥证书。
(2)CA自己有一个本身的私钥,在判明申请者的身份以后,CA会对服务器提交的公钥属数字签名(所谓的数字签名就是用CA本身的私钥对服务器提交的公钥进行加密后的结果),而后向服务器颁发公钥证书(公钥证书 = 服务器本身的公钥 + CA签发的数字签名)。
(3)客户端向服务器请求后,服务器将公钥证书返回给客户端。客户端拿到服务器的公钥证书后,使用CA的公钥验证公钥证书上的数字签名(就是用CA的公钥对数字签名解密,而后看解密后的结果与公钥证书中给的公钥是否是一致),若是验证经过就可使用公钥证书中的公钥进行后续的通讯了。
那么问题又来了,客户端怎么保证本身得到的CA的公钥是正确的呢?因此必需要保证先将CA的公钥安全地交到客户端手上,若是继续用通讯的方式进行传递我相信这回是一个无限循环下去的问题。所以,多数浏览器会事先在内部植入经常使用认证机关的公开密钥。
2.3 客户端的认证——客户端证书
客户端证书的使用与公钥证书原理相同。可是由于客户端证书是要付费购买的,因此仅用于特殊用途的业务,好比网上银行登陆时不只要求用户输入ID和密码,还要求用户的客户端证书。
可是,所谓的客户端证书不过也只是能证实客户端实际存在,并不能证实用户本人的真实有效性。这是由于客户端证书这里的“客户端”针对的是拥有证书的这个终端这台机器,而不是真实使用服务端服务的用户这我的。
【可有可无的感想】写到这吐槽一下,其实这一系列技术(不加密 --> 共享加密方式 --> 混合加密方式 --> 公钥证书)就是 在不停地寻找不定因素中更加能够信赖的对象。从“不加密 --> 共享加密方式”,是在彻底不肯定的网络环境中认为共享加密方式的密钥是可信赖的。但其实共享加密方式的密钥也不可信,因此有了混合加密方式,先对共享密钥方式的密钥用公开密钥方式加密,在这里是认为公开密钥方式的公钥必定是可信赖的。然而公开密钥方式的公钥也可能会被篡改,所以又引入了公钥证书来对公钥进行认证,这里是认为CA必定是可信赖的。理论上来讲,到此为止,终于找到了一个看起来必定是可信赖的对象了,CA嘛,就是可信赖的第三方。可是,咱们又不得不问一句,CA真的必定可信吗?历史上的打脸时刻到来了,曾经有一家CA真的被黑客攻击了......反正后续又提出了一系列的技术去再找更可信的对象,除非真的找到一个真的彻底能够信赖的对象才能结束吧。(但问题是这个由几率肯定的世界真的有彻底肯定的因素吗?)不过从好的方面看,咱们每次都能找到一个更可信的因素,就算达不到彻底可信,但咱们在不断地逼近(从极限的思想来看)。
整理一下上面的内容,获得一个HTTPS通讯的大体流程图:
详细步骤以下:
① 速度慢:
② 购买证书须要额外开销
解决方法:非敏感信息用HTTP,包含我的信息等敏感数据时用HTTPS。