网址开头的https表示://pan.baidu.com/s/1FVRqeLTW-vwajp4KFOEeQw

在谈论 网址开头的https表示 协议之前先来回顾一下 HTTP 协议的概念。

HTTP 协议是一种基于文本的传输协议它位于 OSI 网络模型中的应用层。

HTTP 协议使用起来确实非常的方便但是它存在┅个致命的缺点:不安全。

我们知道 HTTP 协议中的报文都是以明文的方式进行传输不做任何加密,这样会导致什么问题呢下面来举个例子:

小明在 JAVA 贴吧发帖,内容为我爱JAVA:

被中间人进行攻击内容修改为我爱PHP

可以看到在 HTTP 传输过程中,中间人能看到并且修改 HTTP 通讯中所有的请求囷响应内容所以使用 HTTP 是非常的不安全的。

这个时候可能就有人想到了既然内容是明文那我使用对称加密的方式将报文加密这样中间人鈈就看不到明文了吗,于是如下改造:

使用 AES 加密报文

这样看似中间人获取不到明文信息了但其实在通讯过程中还是会以明文的方式暴露加密方式和秘钥,如果第一次通信被拦截到了那么秘钥就会泄露给中间人,中间人仍然可以解密后续的通信:

那么对于这种情况我们肯定就会考虑能不能将秘钥进行加密不让中间人看到呢?答案是有的采用非对称加密,我们可以通过 RSA 算法来实现这个步骤实际操作也昰比较简单的,在码匠笔记订阅号后台回复网址开头的https表示就可以查看搭建网址开头的https表示服务视频

在约定加密方式的时候由服务器生荿一对公私钥,服务器将公钥返回给客户端客户端本地生成一串秘钥(AES_KEY)用于对称加密,并通过服务器发送的公钥进行加密得到(AES_KEY_SECRET)之后返回給服务端,服务端通过私钥将客户端发送的AES_KEY_SECRET进行解密得到AEK_KEY,最后客户端和服务器通过AEK_KEY进行报文的加密通讯改造如下:

可以看到这种情况下Φ间人是窃取不到用于AES加密的秘钥,所以对于后续的通讯是肯定无法进行解密了那么这样做就是绝对安全了吗?

所谓道高一尺魔高一丈中间人为了对应这种加密方法又想出了一个新的破解方案,既然拿不到AES_KEY那我就把自己模拟成一个客户端和服务器端的结合体,在用户->Φ间人的过程中中间人模拟服务器的行为这样可以拿到用户请求的明文,在中间人->服务器的过程中中间人模拟客户端行为这样可以拿箌服务器响应的明文,以此来进行中间人攻击:

这一次通信再次被中间人截获中间人自己也伪造了一对公私钥,并将公钥发送给用户以此来窃取客户端生成的AES_KEY在拿到AES_KEY之后就能轻松的进行解密了。

中间人这样为所欲为就没有办法制裁下吗,当然有啊接下来我们看看 网址开头的https表示 是怎么解决通讯安全问题的。

网址开头的https表示 其实是SSL+HTTP的简称,当然现在SSL基本已经被TLS取代了不过接下来我们还是统一以SSL作为简稱,SSL协议其实不止是应用在HTTP协议上还在应用在各种应用层协议上,例如:FTP、WebSocket

其实SSL协议大致就和上一节非对称加密的性质一样,握手的過程中主要也是为了交换秘钥然后再通讯过程中使用对称加密进行通讯,大概流程如下:

这里我只是画了个示意图其实真正的 SSL 握手会仳这个复杂的多,但是性质还是差不多而且我们这里需要关注的重点在于 网址开头的https表示 是如何防止中间人攻击的。

通过上图可以观察箌服务器是通过 SSL 证书来传递公钥,客户端会对 SSL 证书进行验证其中证书认证体系就是确保SSL安全的关键,接下来我们就来讲解下CA 认证体系看看它是如何防止中间人攻击的。

上一节我们看到客户端需要对服务器返回的 SSL 证书进行校验那么客户端是如何校验服务器 SSL 证书的安全性呢。

在 CA 认证体系中所有的证书都是由权威机构来颁发,而权威机构的 CA 证书都是已经在操作系统中内置的我们把这些证书称之为CA根证書:

我们的应用服务器如果想要使用 SSL 的话,需要通过权威认证机构来签发CA证书我们将服务器生成的公钥和站点相关信息发送给CA签发机构,再由CA签发机构通过服务器发送的相关信息用CA签发机构进行加签由此得到我们应用服务器的证书,证书会对应的生成证书内容的签名並将该签名使用CA签发机构的私钥进行加密得到证书指纹,并且与上级证书生成关系链

这里我们把百度的证书下载下来看看:

可以看到百喥是受信于GlobalSign G2,同样的GlobalSign G2是受信于GlobalSign R1当客户端(浏览器)做证书校验时,会一级一级的向上做检查直到最后的根证书,如果没有问题说明服务器證书是可以被信任的

那么客户端(浏览器)又是如何对服务器证书做校验的呢,首先会通过层级关系找到上级证书通过上级证书里的公钥來对服务器的证书指纹进行解密得到签名(sign1),再通过签名算法算出服务器证书的签名(sign2)通过对比sign1和sign2,如果相等就说明证书是没有被篡改也不昰伪造的

这里有趣的是,证书校验用的 RSA 是通过私钥加密证书签名公钥解密来巧妙的验证证书有效性。

这样通过证书的认证体系我们僦可以避免了中间人窃取AES_KEY从而发起拦截和修改 HTTP 通讯的报文。

首先先通过对 HTTP 中间人攻击的来了解到 HTTP 为什么是不安全的然后再从安全攻防的技术演变一直到 网址开头的https表示 的原理概括,希望能让大家对 网址开头的https表示 有个更深刻的了解

我要回帖

更多关于 网址开头的https表示 的文章

 

随机推荐