HTTPS:https是http与ssl的结合,为了解决http明文传输导致信息泄露的问题。ssl通过公钥和私钥保证客户端和服务器之间的通讯加密,由权威机构办法的数字证书杜绝了中间人攻击的可能。默认端口为443。
SSL需要到ca申请证书,一般免费证书较少,因而需要一定费用。(笔者一直用阿里云,有个免费ssl申请,还是挺适合个人使用的。据说其他云商也有免费ssl)
有关HTTP发展历史和HTTP2的详细讲解,可以点击查看这篇文章
有关HTTP连接中TCP握手挥手过程的详细讲解,可以点击查看这篇文章
在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,因此对称加密算法要保证安全性的话,密钥要做好保密,只能让使用的人知道,不能对外公开。对称加密算法中,加密和解密都是使用同一个密钥,不区分公钥和私钥。
密钥,一般就是一个字符串或数字,在加密或者解密时传递给加密/解密算法。
在非对称加密算法中,加密使用的密钥和解密使用的密钥是不相同的。
注意:私钥加密后的密文,只要是公钥,都可以解密,但是反过来公钥加密后的密文,只有私钥可以解密。私钥只有一个人有,而公钥可以发给所有的人。
中间人攻击(Man-in-the-MiddleAttack)是指,黑客拦截并篡改网络中的通信数据。又分为被动MITM和主动MITM,被动MITM只窃取通信数据而不修改,而主动MITM不但能窃取数据,还会篡改通信数据。最常见的中间人攻击常常发生在公共wifi或者公共路由上。
图为客户端主动发送消息时:
为了防止中间人攻击,整个传输过程中亟需解决的是保证客户端收到的公钥是服务端发送的,为此提出了数字证书,数字证书是由权威的CA机构给服务端进行颁发,CA机构通过服务端提供的相关信息生成证书,证书内容包含了持有人的相关信息,公钥,签署者签名信息等,最重要的是公钥在数字证书中。数字证书是如何保证公钥来自请求的服务器呢?数字证书上由持有人的相关信息,通过这点可以确定其不是一个中间人;但是证书也是可以伪造的,如何保证证书为真呢?一个证书中含有三个部分:"证书内容(F1), 加密算法(A),加密密文(F3') ",三者的关系如下图,证书内容F1F会被散列算法SHA1计算出hash值F2,然后使用CA机构提供的私钥进行RSA加密
当客户端发起请求的时候,服务器将该数字证书发送给客户端,客户端将其中的加密密文(F3)通过CA机构提供的公钥及逆行解密后得到F2,同时将证书内容(F1)使用SHA1散列成F2,如果两者相等则说明证书没问题。
由于劫持者不知道当初加密使用的私钥是什么,所以永远无法伪造出一个正确的证书可以通过上述的验证。
安全性考虑: HTTPS协议的加密范围也比较有限,在黑客攻击、拒绝服务攻击、服务器劫持等方面几乎起不到什么作用。 SSL证书的信用链体系并不安全,特别是在某些国家可以控制CA根证书的情况下,中间人攻击一样可行。
成本考虑: