在讲HTTPS以前咱们先聊一下密码学的简单知识,由于密码学仍是比较复杂的学科,这里就简单的介绍一些概念,可是这些概念对理解HTTPS有很大的帮助。算法
在密码学中,经常使用Alice和Bob这两个名字进行举例,咱们也尊重一下密码学的文化,通常还有个大坏蛋,截获网络的消息,这我的叫作Eve。安全
咱们举一个小例子,Bob喜欢同班的一个女孩Alice,Bob想给Alice子传一张纸条,写了上了LOVE
,传给Alice,在传送过程当中纸条被老师(Eve)截获了,Eve打开一看,写着LOVE
,Bob被找家长了(居然早恋)。服务器
Bob总结了经验,想出了一个策略,即便纸条被Eve截获也看不懂其中的内容,那么怎么作才能让Eve看不懂,而让Alice能看懂呢?markdown
Bob想出一个办法,把当前的字母变成字母表的上一个字母,也就是是把B变成A,把C变成B,把D变成C。Bob想要写的LOVE
就变成了KNUD
,当Eve截获你的小纸条,看到的就是KNUD
,而Alice会把KNUD
的每个字母变成字母表的下一个字母,也就是解析出了LOVE
,Bob追到了心仪的女孩,也没有被找过家长。网络
这个这样的密码方式叫作***凯撒密码***。dom
密码post
在密码学中密码是一种加密方式,好比上个例子中把当前的字母变成字母表的上一个字母,这是密码。这个须要注意一下和咱们平常生活中的密码概念不一样,生活中的密码一般是指是通行码,通行码和秘钥还不是同一个概念,后面咱们会讲秘钥。学习
明文ui
没有加密以前的内容,就是LOVE
。编码
密文
使用加密以后的内容,也就是KNUD
。
编码
把明文变成密文的过程,也就是把LOVE
经过密码变成KNUD
,加密工做Bob完成的。
解码
把密文变成明文的过程,Alice把KNUD
变成了LOVE
。
密钥
密钥是一个用于加解密算法的秘密参数,一般只有通讯者拥有,也就是上一个字母或者上两个字母。
你们发现了,在传送小字条的过程当中,密文是能够被Eve随便截获的,Eve也能够知道你的编码和解码方式(向前移动字母),可是老师不知道密钥,也就是不知道移动几个字母,这样老师仍是看不懂小纸条。
咱们再继续上一个例子,过了一个月,Bob发现Eve可能要破解你的小字条,Bob同Alice商量,咱们换一下编码方式吧,咱们把当前字母变成字母表的上一个字母的方式变成当前字母变成字母表的上两个字母的方式吧,这样Eve就会更难破解。
对称密钥加密是密码学中的一类加密算法。这类算法在加密和解密时使用相同的密钥。这个很容易理解,就是上面的例子,Bob和Alice使用的相同的秘钥,都是变成字母表的上一个字母。
再来个例子,Bob是一个特工,想把一个很是机密的事情告诉Alice,Bob把很是机密的事情写好后,放在一个箱子中(假设这箱子很是结实,只能用钥匙打开),Bob用钥匙锁好以后,把箱子邮寄了出去,只有Bob和Alice有开这个箱子的钥匙。当Alice收到箱子后,她用钥匙打开箱子看到其中的内容,这个就是对称密钥加密。
非对称称密钥加密是密码学的一种算法,它须要两个密钥,一个是公开密钥,另外一个是私有密钥;一个用做加密,另外一个则用做解密。
如今咱们先讨论一个问题,也就是对称密钥加密有什么大的缺点,特别是在互联网中。
经过上面的图很好理解,Alice想和Bob进行通信,Alice经过密钥进行了编码,Bob经过密钥进行了解码,这样互联网中有人截获了密文,也不知道Alice和Bob在说什么。可是你们想过没有,密钥怎么办传输。
也就是在Alice和Bob第一次通信的时候,Alice生成了一个密钥,怎么传输给B呢?经过网络传输吗,这样一定会被户联网中的坏人(Eve)给截获,若是截获了密钥,Eve就能经过密钥解码密文,这可怎么办?
咱们就把密钥再加密传输,这样应该能够了。答案是这样不行,若是密钥能在互联网中安全传输,那么密文也能够啊!就不须要加密了(这个论证方法很牛),看来对称密钥加密有一些问题。
这个时候非对称称密钥加密出马了,他是怎么作到,不在互联网中传输密钥,并且在传输过程当中一直是密文的牛逼程度。
非对称密码加密中传输的过程是密文,并且Bob的私钥没有在互联网中传输,一切都很美好(看起来很美好)。
你们有没有发现一个问题,由于Bob的公钥是公开的,Eve能够拿到Bob的公钥进行加密,伪装Alice,发送一个消息,在xxx地点见面,这个时候Bob没办法验证对方是否是Alice,这个问题怎解决?下面为你们揭晓。
数字签名是作什么事情的呢,看传输内容是否被修改过和验证是否是做者发出的内容 ,那怎么作的的呢。
Bob想验证内容是不是Alice发送,或者内容是否被Eve修改过。
上面传输的整个过程,可是你们可能仍是会有一点点不理解,他们是怎么验证传输内容是否被修改过和验证是否是做者发出的内容,下面讲解一下。
验证是否是做者发出的内容:你们看上面第2步,Alice用本身的私钥对摘要进行了一次编码,而只有Alice有本身的私钥,这样Eve没有办法冒充Alice。
传输内容是否被修改过:这个比较容易理解,由于内容经过MD5生成了内容摘要,若是修改了内容,Alice生成的内容摘要和Bob的必定不同。
有了数字签名Bob就能够验证这文字内容是否是Alice发的,可是有一天Eve偷走了Bob的电脑,把Alice的公钥换成了本身的公钥,这样Eve就能够假装成Alice和Bob通信了。那咱们怎么避免这样的问题发生呢?
这个时候出现了一个机构,证书受权中心(CA),这组织是干啥的呢,这组织对Alice进行严格的身份验证(CA 有不少的验证手段,能验证这我的是有信誉的人或者公司),发现Alice是一个有信誉的人,给Alice受权了一个证书。由于Eve信誉很差,他拿不到这个证书。
总结起来证书的做用是验证公钥的合法性,也就是Eve换成本身的公钥也没有用。
那么证书怎么生成的呢。
当初人们在设计网络协议的时候,没有考虑网络协议的安全性,HTTP是典型的不安全的协议,只能依靠人们的诚信过活。人们为了更安全的互联网通信,采用了HTTPS这样通信方式。
超文本传输安全协议(Hypertext Transfer Protocol Secure,常称为HTTP over TLS,HTTP over SSL)是一种透过计算机网络进行安全通讯的传输协议。
其实就是在HTTP和TCP协议上加了一层,叫作SSL或者TLS的协议。
那么如今的问题就明确了,咱们只有掌握了SSL或者TLS协议就能够,那么他们之间有什么区别呢,能够这样的简单的理解,TLS只不过是SSL的一个最新的版本。接下来咱们将以TLS 1.2的版本做为主要的学习内容。TLS协议主要有4个很是主要的协议分别是握手协议、密钥规格变动协议、应用数据协议和警报协议。
根据当前的通信的不一样场景,主要把握手协议分红三种状况。
在客户端和服务器端想进行通信的时候,要进行握手,咱们先来讲一下STL握手中最完整的握手机制,也就是完整的握手。完整的握手大概分红四部分,
这是握手的第一条消息,这消息内容是告诉服务端的一些基本状况。
Version
当前客户端的TLS的版本。
Random
随机数,也就是流程图中的客户端随机数。包含32字节的数据,其中28字节是随机生成的(Random Bytes)。剩下的4字节包含额外的信息(GMT Unix Time)。
Session ID
第一条通信中握手是空的。
Cipher Suites
加密套件,TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256
Compression
采用的压缩算法,由于HTTP会对数据进行压缩,这里面就没有进行压缩。
这个是服务端回复客户端的第一条消息,是告诉客户端的一些基本信息,而且肯定加密套件。
典型的Certificate消息用于携带的证书链,叶子证书必须是第一个发送,中间证书按照正确的顺序跟在叶子证书以后。
当证书验证不足的时候,须要补充一些信息。消息内容对于不一样的协商算法套 件都会存在差别。
服务器要求客户端上传证书,这个步骤是能够省略的。
服务端发送完成了。
客户端把证书发送到服务端。
这是通过加密的预备主密码。预备主密码是当作主密码的一个种子。
RSA密钥交换的过程当中。客户端生成预主密钥(46字节随机数),使用服务器公钥对其加密,将其包含在这个消息中,最后发送出去。
证实本身拥有对应的私钥,这个消息只有服务端发送Certificate Request,客户端才会发送这个消息。
咱们切换到了主密码,在这以前他们通信都是明文进行通信的。
客户端说握手结束。
切换到主密码通信。
服务端说握手结束。