下一代网络 期末报告

HTTPS相关资料

HTTPS定义

HTTPS (Secure Hypertext Transfer Protocol)直译为安全超文本传输协议,是一个安全的通信通道,可以用来保护用户的计算机和网站之间传输数据的完整性和机密性,它可以保护网站受到不必要活动的侵害。

HTTPS主要通过三个方面进行保护。

第一个方面是认证,即我们所访问的是真实所想要访问的网站,还是某些不法分子恶意捏造身份混淆视听的网站?通过认证,用户可以确认他正在直接和网站建立通信,而不是某些中转站。

第二个方面是数据完整性。是否有人篡改了传输的数据对于网页信息是否真实可靠起到了决定性的作用。当我们个人或者企业使用网络进行通信时,服务商必须保证用户能够准确无误地看到服务器所传递的信息。

第三个方面是加密。是否有其他人能够在通信双方不知情的情况下看到其通信内容?用户所输入的信息以及服务器提供的信息只应存在于二者之间。

HTTPS这三大保护对于现代网络的安全性、可靠性可谓至关重要。简而言之,当用户通过互联网访问网站时,应该像线下直接前往对应的服务商公司去咨询信息一样安全可靠。因为HTTPS是现代Web的基础元素,所以它也是许多现代浏览器的必备功能。

许多特定服务都要求HTTPS才能够使用。例如地理定位、自动填写表格、web摄像头以及渐进式Web应用程序(PWA)、通知推送、缓存等等。

在许多现代浏览器中,网站是否具备HTTPS也会直接显示在地址栏附近。当然,如今大多数浏览器已经默认用户访问的网站使用HTTPS协议。例如使用chrome浏览器时,浏览器栏中会将未使用HTTPS的网站标记为不安全(insecure)。目前许多搜索引擎也倾向于在提供搜索结果时,将使用HTTPS的网站靠前排名。因此,使用HTTPS也是实现SEO优化的重要一环。

如何使用HTTPS

HTTPS URL与HTTP的对应方不同,如果要从HTTP切换为HTTPS,我们需要将所有内容从HTTP URL重定向到HTTPS版本。通常,此操作是通过服务端301重定向实现的。通俗来说,便是网站迁移。以下是一般采取的步骤。

首先,我们需要设置一个HTTPS网站。为此,我们可能需要托管服务商的帮助,并且需要HTTPS证书。通常来说,Chrome等现代浏览器支持所有的证书。免费证书对于一些个人或者小型企业来说十分划算。需要遵循的确切步骤因网站而异。有些时候,只是更改设置的问题,有时则需要涉及更多操作。

第二步,我们需要在Google Search Console中验证所有权。这一步比较关键,可以让我们追踪和HTTPS版本2相关的问题。此外,我们可以选择验证整个域,这样我们可以将HTTP和HTTPS数据合并到一个位置。

第三步,广泛测试我们的HTTPS站点。可以让一些用户实验以下,避免遗漏设置一些奇怪的东西。最好在提交HTTPS版本之前找到并且修复他们。

具体的内容如下:

避免混合内容。混合内容指的是HTTPS上的页面包含了HTTP的元素。比如,我们可能使用了HTTP嵌入了图像、广告或者分析脚本。这对于网站安全十分不利,当浏览器识别出以上情况时会警告用户,造成不必要的困惑。

检查内部链接。确保网站内的所有内部链接都指向了HTTPS版本的网页。这一方面可以使用多种工具进行检查,也可以直接在浏览器中点击并查看显示的URL。

检查隐藏的引用。如果我们使用了rel=canonical或者rel=alternate herflang链接元素,确保它们都指向HTTPS。如果使用了结构化数据,也请确保所有URL均引用了HTTPS版本。

检查站点地图文件。站点地图文件有助于搜索引擎更有效地进行爬网和建立索引。因此,指向正确的URL十分重要。

第四步,使用服务器端重定向所有请求。从HTTP版本转发到HTTPS版本。

第五步,在Search Console中监视迁移。并且从头开始定期检查,以便在造成问题之前发现他们,尤其是站点地图文件,是否正常处理,是否出现意外的抓取错误。

如果我们正确设置了所有内容,大多数网站只需要一周时间进行过度。

SSL与TLS

功能与工作原理

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络连接进行加密。

SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。SSL协议可分为两层: SSL记录协议(SSL Record Protocol):它建立在可靠的传输协议(如TCP)之上,为高层协议提供数据封装、压缩、加密等基本功能的支持。 SSL握手协议(SSL Handshake Protocol):它建立在SSL记录协议之上,用于在实际的数据传输开始前,通讯双方进行身份认证、协商加密算法、交换加密密钥等。

SSL 和 TLS 协议可以为通信双方提供识别和认证通道,从而保证通信的机密性和数据完整性。Secure Socket Layer,为Netscape(网景)所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取及窃听。TLS 协议是从Netscape SSL 3.0协议演变而来的,不过这两种协议并不兼容,SSL 已经逐渐被 TLS 取代。 TLS 握手是启动 HTTPS 通信的过程,类似于 TCP 建立连接时的三次握手。 在 TLS 握手的过程中,通信双方交换消息以相互验证,相互确认,并确立它们所要使用的加密算法以及会话密钥 (用于对称加密的密钥)。可以说,TLS 握手是 HTTPS 通信的基础部分。

TLS认证过程

1. “client hello”消息:客户端通过发送”client hello”消息向服务器发起握手请求,该消息包含了客户端所支持的 TLS 版本和密码组合以供服务器进行选择,还有一个”client random”随机字符串。

2. “server hello”消息:服务器发送”server hello”消息对客户端进行回应,该消息包含了数字证书,服务器选择的密码组合和”server random”随机字符串。

3. 验证:客户端对服务器发来的证书进行验证,确保对方的合法身份,验证过程可以细化为以下几个步骤:

检查数字签名

验证证书链

检查证书的有效期

检查证书的撤回状态 (撤回代表证书已失效)

   4. “premaster secret”字符串:客户端向服务器发送另一个随机字符串”premaster secret (预主密钥)”,这个字符串是经过服务器的公钥加密过的,只有对应的私钥才能解密。

   5. 使用私钥:服务器使用私钥解密”premaster secret”。

   6. 生成共享密钥:客户端和服务器均使用 client random,server random 和 premaster secret,并通过相同的算法生成相同的共享密钥 KEY。

   7. 客户端就绪:客户端发送经过共享密钥 KEY加密过的”finished”信号。

   8. 服务器就绪:服务器发送经过共享密钥 KEY加密过的”finished”信号。

   9. 达成安全通信:握手完成,双方使用对称加密进行安全通信。

SSL证书部署实战

以下为个人网站Orchis.me的SSL证书部署。主要包括未部署时的抓包信息分析以及简单的部署流程分享。

如下图所示,在写本文章之前我的个人网站并没有采用HTTPS,从而导致了使用edge浏览器访问时浏览器弹出了警告:

通过网络分析软件截获重要数据

正如浏览器所提示的那样,在这种网站上填写的个人数据很容易就会被第三方截获,十分不安全。

打开科来网络分析系统,新建一个分析工程,随后用浏览器访问Orchis.me,在TCP会话中便可以看到对应的数据包记录。

这些数据包只是普通的数据包,随便打开一个包,其中显示的数据流如下图所示

从中不难发现这一个数据包传送的是一张图片,如果对数据进行解码一定可以还原图片内容,也许并不会对用户造成多大损失。但是涉及到账户,密码等重要数据时,HTTP的问题便显得尤为突出了。

例如,当用户要访问某一篇受到密码保护的文章,他必须输入密码,HTTP传送的数据包会将密码泄露。

我们打开抓包软件,然后访问对应的网页并且输入密码提交,此时数据包已经被软件记录,我们可以调出记录分析

找到对应站点的数据包,以password为关键词条进行搜索,很快便锁定了我们先前输入并提交的密码。

SSL/TLS部署

首先要为网站申请SSL证书,最好选择名气较大,有资质的CA进行购买,但价格通常极为昂贵。此处直接选择免费的Let’s Encrypt公司颁发的证书。Let’s Encrypt是一个于2015年三季度推出的数字证书认证机构,旨在以自动化流程消除手动创建和安装证书的复杂流程,并推广使万维网服务器的加密连接无所不在,为安全网站提供免费的传输层安全性协议(TLS)证书。

登录宝塔面板,选择需要部署的网站进行SSL证书部署。

若用户选择DNS验证,系统会为用户生成一条CNAME记录或TXT记录,用户只需在自己的域名服务商处增加此条CNAME或TXT解析记录,即可完成域名验证。

若用户选择文件验证,系统会为用户生成一个带有随机字符串的HTML页面,用户需将此页面放在域名指向服务器中的指定位置,并确认可通过公网访问。

部署完成后可以看到对应的密钥和证书

此证书可以自动续期,十分省力。

部署完成后,再访问Orchis.me时,浏览器便不会再弹出安全警告了,具体信息如下图所示。

完成证书部署以后,当我们再次企图通过抓包软件截获敏感信息时,已经找不到任何有价值的包进行进一步分析了。

对于HTTPS的包,除了ip地址信息以外其他一律为密文,没有对应密钥是难以被破解的。

虽然已经部署了SSL证书,启用了HTTPS,但是我发现在浏览器中直接输入网址后采用的依然是HTTP协议,必须手动添加https://后才可以达到效果。换言之,当网站安全方面,80端口和443端口同时开启时,浏览器依然默认进行了80端口的通信。因此,我们还需在ssl部署页面上勾选“强制使用HTTPS”,这样才能确保用户的安全。在网页配置中可以看到如下语句:

   listen 80; 

listen 443 ssl http2;

   此处便进行了HTTP的重定向至HTTPS,也就是将80端口重定向至443端口。

至此,网站的HTTPS部署以及其对比于普通HTTP的优劣分析已经分享完了。

发表评论

邮箱地址不会被公开。 必填项已用*标注